黑马程序员技术交流社区
标题:
关于多线程死锁的问题,请教一下
[打印本页]
作者:
落马居士
时间:
2015-7-9 12:43
标题:
关于多线程死锁的问题,请教一下
我写了一个代码运行会死锁的类,但是我在eclipse上运行了八十来遍,结果硬是一次死锁情况都没遇上,请教一下,是我的代码有小问题了还是我人品有问题
package cn.itcast;
class Demoa{}
class Demob{}
public class DiedClok extends Thread {
Demoa da = new Demoa();
Demob db = new Demob();
private boolean flag;
public DiedClok(boolean flag){
this.flag = flag;
}
public void run(){
if(flag){synchronized(da){
System.out.println(getName()+"da");
}synchronized(db){
System.out.println(getName()+"db");
}
}else {synchronized(db){
System.out.println(getName()+"db");
}synchronized(da){
System.out.println(getName()+"da");
}
}
}
}
复制代码
package cn.itcast;
public class DeidclokDemo {
public static void main(String[] args) {
DiedClok dc =new DiedClok(true);
DiedClok dc1 = new DiedClok (false);
dc.setName("1号");
dc1.setName("2号");
dc.start();
dc1.start();
}
}
复制代码
作者:
梁思宇
时间:
2015-7-9 12:50
本帖最后由 梁思宇 于 2015-7-9 12:53 编辑
Demoa da = new Demoa();
Demob db = new Demob();
这个...
你建了两个类的实例,分别执行
然后每个实例里都有一个da,也都有一个db
这就相当于,一个人两把钥匙...
而不是两个人两把钥匙....
所以锁不上
作者:
cyd1058
时间:
2015-7-9 12:55
给力!加油!
作者:
杜弦东.
时间:
2015-7-9 12:55
这能锁上我直播吃键盘
作者:
闪电无忧
时间:
2015-7-9 22:16
这个问题好多人都会碰到,你需要在自己设定的锁前面加上private static final 修饰,这样才会是所有对象共用的锁
作者:
落马居士
时间:
2015-7-10 20:04
闪电无忧 发表于 2015-7-9 22:16
这个问题好多人都会碰到,你需要在自己设定的锁前面加上private static final 修饰,这样才会是所有对象共 ...
谢了啊。。。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2