线程中的死锁情况?

Har*_*aji 5 java multithreading

想知道线程中的死锁条件是什么,因为在我研究过如何避免死锁情况的许多书中,我只是想知道什么是死锁情况和一个示例代码?

Cha*_*ara 22

死锁是并发程序无法继续的情况.

一个线程正在等待另一个线程,而另一个线程正在等待第一个线程的完成.

常用的现实世界的例子是交通流量.

替代文字

在另一个队列移动之前,没有流量可以移动.

你可以在这里找到关于死锁的好讨论.

更新:这是我在网上找到的一个java 示例(Oreilly书).它有评论,所以你可以很容易地理解它.

用餐哲学家问题是另一个了解死锁的好例子.

删除死了Imageshack链接

死锁检测和死锁预防是在了解死锁时可能有用的两个相关领域.


Rit*_*ose 6

死锁是A等待B而B等待A.

所以你可以在线程A:

while(B.incomplete()){
    B.wait();
} A.complete = true;
Run Code Online (Sandbox Code Playgroud)

并在线程B中:

while(A.incomplete()){
    A.wait();
} B.complete = true;
Run Code Online (Sandbox Code Playgroud)