如何以編程方式生成 Java 死鎖以及如何分析死鎖

已發表: 2013-07-03

Crunchify 的 Java 線程鎖示例

死鎖是兩個或多個線程被永遠阻塞的編程情況,這種情況出現在至少兩個線程和兩個或更多資源的情況下。

在這裡,我編寫了一個簡單的程序,會導致死鎖的情況,然後我們將看看如何分析它。

這是一個簡單的 Java 示例:

輸出:

當您的應用程序像上面的示例一樣掛起時,您可以獲得線程轉儲並查看死鎖線程。

例如,在 Mac 上,您可以執行Ctrl-\或簡單地使用jstack和進程 ID 來獲取線程轉儲,這使得死鎖的位置非常明顯。

在此示例中,線程轉儲如下所示:

注意這裡 BLOCKED 和 WAITING threads => Deadlock情況。在下一個示例中,將提供簡單的 Java 程序以編程方式生成上述線程轉儲。