黑马程序员技术交流社区

标题: 死锁问题 还有这个为什么锁不上 来看看 [打印本页]

作者: 付鹏    时间: 2012-3-17 03:46
标题: 死锁问题 还有这个为什么锁不上 来看看

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 {
        private boolean flag;
        Object obj1 = new Object();
        Object obj2 = new Object();

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


          
为什么这两个锁不上 别告诉我怎么改 我知道怎么改 我就想知道为什么?
作者: 刘基军    时间: 2012-3-17 08:27
在你的xiancheng类中,两个锁都是实例类型,
Object obj1 = new Object();
Object obj2 = new Object();
造成创建了两个对象,两个对象也各自创建了obj1和obj2,造成两个线程没有使用同一个锁,所以无法达到死锁的目的。
建议修改:
Object obj1 = new Object();
Object obj2 = new Object();
为:
static Object obj1 = new Object();
static Object obj2 = new Object();

作者: 刘元明    时间: 2012-3-17 10:17
因为同步有两个前提:1.有两个或两个以上的线程;2.必须多个线程使用同一个锁。
你的程序第二个条件不满足所以锁不上
作者: 张志阳    时间: 2012-3-17 13:17
麻烦问下while (true) 的作用是什么?




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