黑马程序员技术交流社区
标题:
关于多线程死锁的问题,求教
[打印本页]
作者:
君子无醉
时间:
2015-5-25 20:40
标题:
关于多线程死锁的问题,求教
这是我写的死锁代码:
package dieLock;
public class DieLock extends Thread {
private boolean flag;
private Object obj1 = new Object();
private Object obj2 = new Object();
public DieLock(boolean flag) {
this.flag = flag;
}
@Override
public void run() {
if (flag) {
synchronized (obj1) {
System.out.println("if obj1");
synchronized (obj2) {
System.out.println("if obj2");
}
}
} else {
synchronized (obj2) {
System.out.println("else obj2");
synchronized (obj1) {
System.out.println("else obj1");
}
}
}
}
}
package dieLock;
public class DieLockDemo {
public static void main(String[] args){
DieLock lock1=new DieLock(true);
DieLock lock2=new DieLock(false);
lock1.start();
lock2.start();
}
}
以上代码,如果允许DieLockDemo的话,不会出现死锁问题(反复刷新,运行了很多遍),如果将 private Object obj1 = new Object(); private Object obj2 = new Object();加上静态修饰符修饰的话,private static Object obj1 = new Object(); private staitc Object obj2 = new Object(); 就会很容易出现死锁问题,请问大神为什么会这样 加上静态和不加静态为什么差别会那么大,synchronized不是传一个任意Object锁对象就可以吗,为什么还牵扯到静态修饰的问题,请大神详细解释一下,谢谢!
作者:
l598790586
时间:
2015-5-25 20:55
你这个执行完一次就不执行了,对一些配置还可以的电脑,全部执行完都不死锁都是很正常的事
作者:
君子无醉
时间:
2015-5-25 21:07
l598790586 发表于 2015-5-25 20:55
你这个执行完一次就不执行了,对一些配置还可以的电脑,全部执行完都不死锁都是很正常的事 ...
....但是如果加上static的话 每次执行都是死锁 不加的话 我运行了很多遍 都没有出现死锁问题
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2