黑马程序员技术交流社区

标题: 为什么这段代码实现不了死锁? [打印本页]

作者: 王海龙    时间: 2012-12-22 21:41
标题: 为什么这段代码实现不了死锁?
  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了,就是不死锁,是不是什么地方有问题?        





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2