黑马程序员技术交流社区

标题: 死锁线程代码 [打印本页]

作者: 新的开始    时间: 2016-3-25 22:24
标题: 死锁线程代码
不知道哪做的不对,有时候能锁住有时候不能锁住,求大神给看看

死锁线程.rar

912 Bytes, 下载次数: 149


作者: wangze    时间: 2016-3-25 22:40
路过帮顶,我们也刚刚学
作者: BugBuff    时间: 2016-3-25 23:46
可以在run方法中的if和else中写一个无限循环,应该就可以了,不是很懂
public void run() {
                if(flag) {//flag赋值为true时,执行的代码
                        while (true) {
                                synchronized (Test2.LOCK1) {
                                        System.out.println("if中锁1");
                                        synchronized (Test2.LOCK2) {
                                                System.out.println("if中锁2");
                                        }
                                }
                        }
                       
                } else {//flag赋值为false时,执行的代码
                        while (true) {
                                synchronized (Test2.LOCK2) {
                                        System.out.println("else中锁2");
                                        synchronized (Test2.LOCK1) {
                                                System.out.println("else中锁1");
                                        }
                                }
                        }
                       
                }
        }
作者: 新的开始    时间: 2016-3-26 10:21
BugBuff 发表于 2016-3-25 23:46
可以在run方法中的if和else中写一个无限循环,应该就可以了,不是很懂
public void run() {
                if(flag) {//fl ...

好像不使用循环  
作者: 新的开始    时间: 2016-3-26 10:28
wangze 发表于 2016-3-25 22:40
路过帮顶,我们也刚刚学

谢谢了。。。。。。。。。
作者: luomoss    时间: 2016-3-26 11:16
你的代码中死锁要发生必须是if里面thread在用Test2.LOCK1等待Test2.LOCK2,而else里面的thread2在用Test2.LOCK2,等待Test2.LOCK1。因为双方都获取到一个锁,都在等待对方的锁,因为等待,死锁就会发生。
但是线程的执行是没有顺序的,比如有可能thread已经获取到Test2.LOCK2,而thread2才进入run()呢?这样就不会被锁住。
加上循环或者人为让线程停止下来等待可以增加死锁的概率,加到一定范围死锁几乎必产生。
作者: 新的开始    时间: 2016-3-26 14:29
luomoss 发表于 2016-3-26 11:16
你的代码中死锁要发生必须是if里面thread在用Test2.LOCK1等待Test2.LOCK2,而else里面的thread2在用Test2.L ...

好像有点明白了谢谢了
作者: Kalsifa    时间: 2016-3-26 18:49
谢兄,猜猜我是谁
作者: l540144279    时间: 2016-3-26 18:59
线程的死锁有什么用?




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