デッドロック
ネジは非常に便利なツールであり、非常に使いやすく、理解しやすいため、多くのアプリケーションを備えています。しかし同時に、それはいくつかのトラブルをもたらすでしょう、つまり、それは行き詰まりを引き起こす可能性があります。デッドロックが発生すると、システム機能は利用できなくなります。まずコードを見てみましょう。これにより、デッドロックが発生し、スレッドスレッド_1とスレッド_2がお互いがロックを解放するのを待ちます。
パッケージスレッド;パブリッククラスDeadLockDemo {private static string a = "a"; private static string b = "b"; public static void main(string args []){new Deadlockdemo()。Deadlock();} private void deadlock(){// thread thread_1スレッド_1 = new runnable(){new runride(){new runnable(){new runnable() {system.err.println( " - thread_1 lock a -----"); synchronized(b){system.err.println( " - lock b -----");}}}} {system.out.println( " - thread_2 lock b -----"); synchronized(a){system.out.println( " - thread_2 lock a ----");}}}}); thread_1.start(); thread_2.start();}}}}}}}}}}このコードは、デッドロックシナリオのデモンストレーションにすぎません。実際には、そのようなコードを書くことはできません。しかし、いくつかのより複雑なシナリオでは、いくつかの異常な状況(デッドループ)があるため、Thread_1がケーブルを放出していないなど、このような問題に遭遇する可能性があります。または、thread_1はデータベースケーブルを取得し、ロックをリリースするときに例外がスローされますが、リリースされません。
デッドロックが発生すると、サービスを提供できないため、ビジネスは知覚可能です。次に、ダンプスレッドを介して問題があるスレッドのみを確認できます。次のスレッド情報は、デッドロックデモクラスの35行目と21行目がデッドロックを引き起こしたことを示しています。
「スレッド1」prio = 6 tid = 0x000000000cb13800 nid = 0x19acモニターエントリを待っている[0 x000000000d67f000] java.lang.thread.state:thread.deadlockdemo $ 2.run(deadlockdemo.java:35) - deadlockdemo.java:35) - java.lang.string)-locked <0x00000007d5a9beb8>(java.lang.string)at java.lang.lang.run.run(unknown -source) "prio = 6 tid = 0x0000000000cb0e800 nid = 0x6bc haped waiting bowsion java.lang.thread.state:swreet.deadlockdemo $ 1.run(deadlockdemo.java:21)でブロックされた(オブジェクトモニター)$ 1.run(deadlockdemo.java:21) - <0x00000007d5a9beb8>(a java.lang.string) - ロック<0x0000000007d5a9be88> java.lang.thread.run(不明なソース)
デッドロックを避けるためのいくつかの一般的な方法。
スレッドと同時に複数のロックを取得しないでください。
ロープで複数のリソースを同時に占有する1つのスレッドを避け、各ロープが1つのリソースのみを消費するようにしてください。
内部検索メカニズムを使用する代わりに、lock.trylock(タイムアウト)を使用して、時限検索を使用してみてください。
データベースケーブルの場合、ロックとロック解除はデータベース接続にある必要があります。それ以外の場合は、ロック解除が失敗します。
参照:
//www.vevb.com/article/131946.htm
//www.vevb.com/article/131943.htm
要約します
上記は、この記事のデッドロックを避けるためのJavaの一般的な方法の完全なコード分析です。私はそれが誰にでも役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!