黑马程序员技术交流社区

标题: 死锁问题 高手进 [打印本页]

作者: 付鹏    时间: 2012-3-17 03:44
标题: 死锁问题 高手进

public class DidSynchronized {
        public static void main(String[] args) {
                Thread a = new Thread(new xiancheng(true));
                Thread b = new Thread(new xiancheng(false));
                a.start();
                b.start();
        }       
}

class xiancheng implements Runnable {
        static boolean flag;
        xiancheng(boolean flag) {
                this.flag = flag;
        }
        public void run() {
                if(flag) {
                        while(true){
                                synchronized(Mylock.obj1) {
                                                System.out.println("if-----obj1");
                                                synchronized(Mylock.obj2) {
                                                        System.out.println("if-----obj2");
                                                }
                                }
                        }
                }
                else {
                        while(true){
                                synchronized(Mylock.obj2) {
                                        System.out.println("-----obj2");
                                        synchronized(Mylock.obj1) {
                                                System.out.println("else-----obj1");
                                        }
                                }
                        }
                }
        }
}

class Mylock {
         static Object obj1 = new Object();
         static Object obj2 = new Object();
}
这个死锁为什么锁不上   谁帮看下
作者: 刘基军    时间: 2012-3-17 08:19
Thread a = new Thread(new xiancheng(true));
Thread b = new Thread(new xiancheng(false));
虽然你创建了两个xiancheng对象,但是:
static boolean flag;
flag是静态的,所有的对象都是共用同一个flag,就造成两个线程不可能同时进入if和elseif。
要想达到死锁的目的,建议将代码修改为:
static boolean flag;
改为:
boolean flag;






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