如何以编程方式生成 Java 死锁以及如何分析死锁

已发表: 2013-07-03

Crunchify 的 Java 线程锁示例

死锁是两个或多个线程被永远阻塞的编程情况,这种情况出现在至少两个线程和两个或更多资源的情况下。

在这里,我编写了一个简单的程序,会导致死锁的情况,然后我们将看看如何分析它。

这是一个简单的 Java 示例:

输出:

当您的应用程序像上面的示例一样挂起时,您可以获得线程转储并查看死锁线程。

例如,在 Mac 上,您可以执行Ctrl-\或简单地使用jstack和进程 ID 来获取线程转储,这使得死锁的位置非常明显。

在此示例中,线程转储如下所示:

注意这里 BLOCKED 和 WAITING threads => Deadlock情况。在下一个示例中,将提供简单的 Java 程序以编程方式生成上述线程转储。