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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 付鹏 中级黑马   /  2012-3-17 03:44  /  1438 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


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();
}
这个死锁为什么锁不上   谁帮看下

1 个回复

倒序浏览
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;

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马