黑马程序员技术交流社区
标题:
大家看看我这个多线程死锁为什么没有实现啊?
[打印本页]
作者:
张锐
时间:
2012-3-6 10:58
标题:
大家看看我这个多线程死锁为什么没有实现啊?
public class TestDeathlock {
/**
* @param args
*/
public static void main(String[] args) {
DeathLock dl1 = new DeathLock(true);
DeathLock dl2 = new DeathLock(false);
Thread thread1 = new Thread(dl1);
Thread thread2 = new Thread(dl2);
thread1.start();
thread2.start();
}
}
class DeathLock implements Runnable{
private boolean b ;
DeathLock(Boolean b){
this.b = b;
}
static Object o1=new Object();
static Object o2=new Object();
@Override
public void run() {
if(b){
synchronized (o1) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
synchronized (o2) {
System.out.println("这里是b为true的");
}
}
if(!b){
synchronized (o2) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
synchronized (o1) {
System.out.println("这里是b为false的");
}
}
}
}
复制代码
两句都能打印,是怎么回事呢?
作者:
刘基军
时间:
2012-3-6 11:28
以一手交钱一手交货比喻,而现在两个人互不信任,A拿着货想让B把钱先给自己,而B拿着钱想让A把货先给自己,最终造成:死锁。
应该将代码改成下面格式:
synchronized (o1)
{
synchronized (o2) {}
}
作者:
张锐
时间:
2012-3-6 11:32
刘基军 发表于 2012-3-6 11:28
以一手交钱一手交货比喻,而现在两个人互不信任,A拿着货想让B把钱先给自己,而B拿着钱想让A把货先给自己, ...
哦哦 是啊 哈哈 确实是包含方式!!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2