黑马程序员技术交流社区
标题:
关于死锁的一个问题
[打印本页]
作者:
祁焱
时间:
2011-11-2 19:58
标题:
关于死锁的一个问题
public class DeadLockTest {
public static void main(String[] args) {
Thread t1 = new Thread(new Test(true));
Thread t2 = new Thread(new Test(false));
t1.start();
t2.start();
}
}
class MyLock
{
//static MyLock lock1=new MyLock();
//static MyLock lock2=new MyLock();
}
class Test implements Runnable {
MyLock lock1=new MyLock();//加static就会死锁
MyLock lock2=new MyLock();//加static就会死锁
private boolean flag;
Object obj1 = new Object();
Object obj2 = new Object();
public Test(boolean flag) {
this.flag = flag;
}
public void run() {
if (flag) {
while (true) {
synchronized (lock1) {
System.out.println("if lock1");
synchronized (lock2) {
System.out.println("if lock2");
}
}
}
} else {
while (true) {
synchronized (lock2) {
System.out.println("else lock2");
synchronized (lock1) {
System.out.println("else lock1");
}
}
}
}
}
}
我想问一下以上程序为什么在注释处加static才会产生死锁,不加static为什么不会产生死锁现象?
作者:
柴永菲
时间:
2011-11-4 19:26
用static 修饰对象程序只创建一个.而这时有两个线程. 相当于两个人抢一双筷子, (死锁)
没有用static 修饰时 程序会在你new 这个对象时都创建一个, 而这时有两个线程.相当于两个人用两双筷子(不会死锁)
希望对你有帮助
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2