java吧 关注:1,265,093贴子:12,766,701
  • 11回复贴,共1

这个程序不是死锁吗?? 为毛Netbeans可以直接运行了!

只看楼主收藏回复




1楼2015-03-07 19:15回复
    不懂帮顶


    IP属地:湖北来自Android客户端2楼2015-03-07 19:35
    收起回复
      2025-06-19 07:38:27
      广告
      这里哪有争夺资源?不是一人一份资源吗


      IP属地:浙江来自Android客户端4楼2015-03-07 20:33
      收起回复
        public class DeadLock implements Runnable {
        public int flag = 0;
        static Object o1 = new Object(),o2 = new Object();
        public void run(){
        System.out.println("flag = "+flag);
        if(flag == 0){
        synchronized(o1){
        try{
        Thread.sleep(500);
        }catch(Exception e ){
        e.printStackTrace();
        }
        synchronized(o2){
        System.out.println("0");
        }
        }
        }
        if(flag == 1){
        synchronized(o2){
        try{
        Thread.sleep(500);
        }catch(Exception e ){
        e.printStackTrace();
        }
        synchronized(o1){
        System.out.println("1");
        }
        }
        }
        }
        public static void main(String[] args) {
        DeadLock d1 = new DeadLock();
        DeadLock d2 = new DeadLock();
        d1.flag=1;
        d2.flag=0;
        Thread t1 = new Thread(d1);
        Thread t2 = new Thread(d2);
        t1.start();
        t2.start();
        }
        }
        修改之后的死锁是这样的, 但是如果
        static Object o1 = new Object(),o2 = new Object();
        取消static关键字后
        Object o1 = new Object(),o2 = new Object();
        为什么就不是死锁了??


        5楼2015-03-08 17:52
        收起回复