A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王海龙 中级黑马   /  2012-12-22 21:41  /  927 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class Deadlock {
  2.     private String a="";
  3.     private String b="";
  4.     private int n=1;
  5.      
  6.     public void write(){
  7.         synchronized (a) {
  8.               try {
  9.                 Thread.sleep(500);
  10.             } catch (InterruptedException e) {
  11.                 // TODO Auto-generated catch block
  12.                 e.printStackTrace();
  13.             }
  14.             synchronized (b) {
  15.                  
  16.                 System.out.println("第" +
  17.                         n+"次被写入");
  18.                 n++;
  19.                  
  20.                  
  21.             }
  22.             
  23.         }
  24.     }
  25.     public void read(){
  26.         synchronized (b) {
  27.             try {
  28.                 Thread.sleep(500);
  29.             } catch (InterruptedException e) {
  30.                 // TODO Auto-generated catch block
  31.                 e.printStackTrace();
  32.             }
  33.             synchronized (a) {
  34.                 System.out.println("第" +
  35.                         n+"次被读取");
  36.                 n++;
  37.                  
  38.             }
  39.             
  40.         }
  41.     }
复制代码
  1. public class MyDeadlock implements Runnable{
  2.     private Deadlock dl;

  3.     public MyDeadlock(Deadlock dl) {
  4.         this.dl = dl;
  5.     }

  6.     @Override
  7.     public void run() {
  8.         for(int i=0;i<100;i++){
  9.             dl.write();
  10.          
  11.         dl.read();
  12.         }
  13.     }
  14.    
复制代码
  1. public class TestDeadlock {
  2.     public static void main(String[] args) {
  3.         Deadlock deadlock=new Deadlock();
  4.         MyDeadlock md=new MyDeadlock(deadlock);
  5.         Thread t1=new Thread(md);
  6.         Thread t2=new Thread(md);
  7.         t1.start();
  8.         try {
  9.             Thread.sleep(500);
  10.         } catch (InterruptedException e) {
  11.             // TODO Auto-generated catch block
  12.             e.printStackTrace();
  13.         }
  14.         t2.start();
  15.         try {
  16.             Thread.sleep(500);
  17.         } catch (InterruptedException e) {
  18.             // TODO Auto-generated catch block
  19.             e.printStackTrace();
  20.         }
  21.          
  22.     }
复制代码
能sleep的地方都sleep了,就是不死锁,是不是什么地方有问题?        

评分

参与人数 1技术分 +1 收起 理由
邵天强 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马