プログラムでJavaデッドロックを生成する方法とデッドロックを分析する方法

公開: 2013-07-03

CrunchifyによるJavaスレッドロックの例

デッドロックは、2つ以上のスレッドが永久にブロックされるプログラミング状況です。この状況は、少なくとも2つのスレッドと2つ以上のリソースで発生します。

ここでは、デッドロックシナリオを引き起こす簡単なプログラムを作成し、それを分析する方法を説明します。

簡単なJavaの例を次に示します。

出力:

上記の例のようにアプリがハングしている間、スレッドダンプを取得して、デッドロックされたスレッドを確認できます。

たとえば、Macでは、 Ctrl-\を実行するか、 jstackとプロセスIDを使用してスレッドダンプを取得します。これにより、デッドロックがどこにあるかが非常に明確になります。

この例では、スレッドダンプは次のようになります。

ここで注目されるのは、BLOCKEDおよびWAITING threads => Deadlock状況です。次の例では、上記のスレッドダンプをプログラムで生成するための単純なJavaプログラムを提供します。