Java-thread-deadlock
提供:Dev Guides
Java-スレッドデッドロック
デッドロックは、2つ以上のスレッドが相互に待機して永久にブロックされる状況を表します。 デッドロックは、複数のスレッドが同じロックを必要とするが、異なるロックを取得するときに発生します。 Javaマルチスレッドプログラムは、 synchronized キーワードによって、指定されたオブジェクトに関連付けられたロックまたはモニターを待機している間、実行中のスレッドがブロックされるため、デッドロック状態になる可能性があります。 これが例です。
例
上記のプログラムをコンパイルして実行すると、デッドロック状態が見つかり、プログラムによって生成される出力は次のようになります-
出力
上記のプログラムは、どちらのスレッドも処理を続行できず、互いにロックを解除するのを待機していないため、ハングアップします。そのため、CTRL + Cを押してプログラムから抜けることができます。
デッドロックソリューションの例
同じプログラムのロックと実行の順序を変更して、両方のスレッドがまだお互いを待機しているかどうかを確認しましょう-
例
したがって、ロックの順序を変更するだけで、プログラムがデッドロック状態になるのを防ぎ、次の結果で完了します-
出力
上記の例は概念を明確にするためのものですが、それは複雑な概念であり、アプリケーションを開発してからデッドロック状態に対処する前に深く掘り下げる必要があります。