中易网

java死锁小程序

答案:2  悬赏:20  
解决时间 2021-03-08 04:26
package Thread;

public class TestDeadLock implements Runnable{

int flag = 1;
static Object o1 = new Object();
static Object o2 = new Object();

public static void main(String[] args) {
TestDeadLock td1 = new TestDeadLock();
TestDeadLock td2 = new TestDeadLock();
td1.flag = 1;
td2.flag = 0;
Thread t1 = new Thread(td1);
Thread t2 = new Thread(td2);
t1.start();
t2.start();
}

public void run() {
if(flag == 1){
synchronized(o1){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized(o2){
System.out.println("t1 succeed");
}
}
}

if(flag == 0){
synchronized(o2){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
synchronized(o1){
System.out.println("t2 succeed");
}
}
}
}

}
按上述程序的结果是正确的 。但是如果我把static Object o1 = new Object();static Object o2 = new Object();前的static关键字都去掉的话则验证不出死锁。麻烦高手给讲解下原因 谢谢!
最佳答案
t1和t2两个线程,假设首先t1进入run()方法,然后判断flag是否为1,为1则利用对象o1将下面那段代码锁住,与此同时t2进入run()方法,判断flag,为0,则利用o2将下面那段代码锁住,再回过头来,此时t1继续向下执行,执行到synchronized(o2)这,此时o2对象已经被t2锁住,所以o1开始等待o2对象释放锁标记,同理,t2继续往下执行,执行到synchronized(o1)这,也就开始等待o1对象释放锁标记.这样互相等待,就产生死锁.

如果不static,那么它们两个线程都有自己的o1和o2,而不再是公用的了.
全部回答
  不会,new deadthread(true)和new deadthread(false)没有什么关系。现象情况参见堆栈。   请勿尝试在可能会对性能造成不良影响的长时间操作(如i/o)中持有锁。   请勿在调用模块外且可能重进入模块的函数时持有锁。   一般情况下,请先使用粗粒度锁定方法,确定瓶颈,并在必要时添加细粒度锁定来缓解瓶颈。大多数锁定都是短期持有,而且很少出现争用。因此,请仅修复测得争用的那些锁定。   使用多个锁定时,通过确保所有线程都按相同的顺序获取锁定来避免死锁。 
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
电源适配器为什么突然坏了
变色龙眼睛能转来转去是不是它观望四面八方的
白衣服上溅到碱水泡大米的黄水怎么办
金足阁养生会馆这个地址在什么地方,我要处理
当女孩对你说:我以后要是找不到男朋友的话就
移动电话打电话时用3G还是2G?
脸上的黑点里面好像长粉刺有点不舒服怎么回事
鸿欣驾校三十分队地址有知道的么?有点事想过
“ 鲁滨逊在荒无人烟的小岛上克服了种种困难,
晋岙小学这个地址在什么地方,我要处理点事
我是儿子是监狱警察可以参加省里的遴选公务员
没有按时去上电脑课在教室里吃东西如何写检讨
淘宝购物有纠纷可以投诉消费者协会吗
怎么在手机上截图呢
今天可把我气死了,和一个神经病在一起做事,
推荐资讯
重庆解放碑附近的特色美食
阳光鲜花店怎么去啊,有知道地址的么
就业指导作业 请列举大学生就业方式
90年代好像有一部电视剧,上面有一个人的脸是
win10 软件显示模糊。 设备管理器那些也是模
那些部位为什么要打蓝色的框框。阳台那边不是
索尼PSP游戏机破解和没破解是什么意思,有什么
冥冥之中,独见晓安的意思
要毕业工作了,关于工资和福利待遇的事
骆驼和马那个大?
什么反应生成碳化镁
草图大师建模一层楼高应该输入多少数值
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?