Javaでデッドロックを処理する方法は?



この記事では、マルチスレッドプログラムのスレッドがどのようにブロックされるかを示す例を使用して、Deadlock InJavaの概念について説明します。

Javaプログラミング言語はサポートします 。マルチタスクのために同時に実行される複数のスレッドが含まれます。ただし、特定の場合または特定の欠点のために、スレッドは永久に待機状態になります。この記事では、デッドロック状態を理解します そしてそれを回避するためのさまざまな方法。このブログで説明されているトピックは次のとおりです。

文字列分割複数の区切り文字java

Javaのデッドロックとは何ですか?

Javaのデッドロックは、2つ以上のスレッドが永久にブロックされ、互いに待機している状態です。





これは通常、複数のスレッドが同じロックを必要としているが、異なる順序でそれらを取得している場合に発生します。 Javaでは、同期されたキーワードが原因でデッドロック状態に陥ります。

これにより、指定されたものに関連付けられたロックまたはモニターを待機している間、実行中のスレッドがブロックされます。 オブジェクト



Javaのデッドロック-Edureka

デッドロックの例

public class Example {public static void main(String [] args){final String r1 = 'edureka' final String r2 = 'java' Thread t1 = new Thread(){public void run(){synchronized(r1){System。 out.println( 'スレッド1:ロックされたr1')try {Thread.sleep(100)} catch(exception e){} synchronized(r2){System.out.println( 'スレッド1:ロックされたr2')}}} }スレッドt2 = new Thread(){public void run(){synchronized(r1){System.out.println( 'Thread 2:Locked r1')try {Thread.sleep(100)} catch(exception e){}同期(r2){System.out.println( 'スレッド2:ロックされたr2')}}}}} t1.start()t2.start()}}
 出力: スレッド1:ロックされたr1スレッド2:ロックされたr2

Javaでデッドロックを回避する方法は?

デッドロック状態を回避することは完全には不可能ですが、特定の対策または指針に従ってそれらを回避することはできます。

  • ネストされたロックを避ける –複数のスレッドにロックを与えることは避けなければなりません。これがデッドロック状態の主な理由です。これは通常、複数のスレッドにロックを与えるときに発生します。

  • 不必要なロックを避ける –ロックは重要なスレッドに与える必要があります。デッドロック状態を引き起こす不要なスレッドにロックを与える。



  • スレッド結合の使用 –デッドロックは通常、一方のスレッドがもう一方のスレッドの終了を待機しているときに発生します。この場合、スレッドにかかる最大時間でThread.joinを使用できます。

これで、Javaのデッドロックとそれを回避する方法について学習した、この記事の終わりに到達します。このチュートリアルで共有されているすべてのことを明確に理解していただければ幸いです。

「DeadlockInJava」に関するこの記事が関連していると感じた場合は、 25万人以上の満足した学習者のネットワークを持つ信頼できるオンライン学習会社が世界中に広がっています。

私たちはあなたの旅のすべてのステップであなたを助け、Java開発者になりたい学生や専門家のために設計されたカリキュラムを考え出すためにここにいます。このコースは、Javaプログラミングをすぐに開始できるように設計されており、さまざまなJavaのコア概念と高度な概念の両方についてトレーニングします。 お気に入り Hibernate

ご不明な点がございましたら、「DeadlockInJava」のコメントセクションでお気軽にご質問ください。喜んでお答えします。