首页 养生问答 疾病百科 养生资讯 女性养生 男性养生

多线程:死锁

发布网友 发布时间:2022-04-24 13:29

我来回答

2个回答

热心网友 时间:2023-10-14 11:53

我觉得解决你这个问题很容易,你把这里代码改一下:
class MyLock {
public static final Object lockA = new Object();
public static final Object lockB = lockA;//new Object();//就这里改成这样即可!
}
改完后你在跑一边,就不会发生死锁现象了!
你这个练习是让你了解死锁的原理:

两条线程,它本身没有任何关系的,各跑各的,是锁把它们联系在一起的,这就好比!

我给打个比方吧:
两个人甲乙,他们都有自己的屋子,分别把他两锁在自己的屋子里,各自有各自的钥匙!
甲,线程的任务就是想去乙屋子拿东西,
乙,线程的任务就是想去甲屋子那东西,

如果甲去乙家里拿东西,乙的门是不是打开它才可以拿到呢?
如果乙去甲家里那东西,甲的门是不是打开它才可以拿到呢?

和谐状态:
甲去乙门口的时候,恰好乙门处于开启状态,乙去甲家里的时候也是如此!
死锁状态:
甲去乙家里,乙不开门,乙不但不开门,还想去甲家里拿,就发生你争我夺现象了!

热心网友 时间:2023-10-14 11:53

你要注意这两个线程都需要lockA和lockB两个同步锁,所以它们并非无关,而是竞争关系,可能互相阻塞。
线程1如果正在尝试获得lockA锁,那么它一定获得了lockB锁。线程2如果正在尝试获得lockB锁,那么它一定获得了lockA锁。如果某一时刻两个线程都拥有同时正在尝试获取对方的锁,那么就会导致死锁,结果如上图。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com