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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 付鹏 中级黑马   /  2012-3-17 03:46  /  1443 人查看  /  4 人回复  /   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 {
        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");
                                        }
                                }
                        }
                }
        }
}


          
为什么这两个锁不上 别告诉我怎么改 我知道怎么改 我就想知道为什么?

4 个回复

倒序浏览
在你的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();
回复 使用道具 举报
因为同步有两个前提:1.有两个或两个以上的线程;2.必须多个线程使用同一个锁。
你的程序第二个条件不满足所以锁不上
回复 使用道具 举报
麻烦问下while (true) 的作用是什么?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马