#4 java でデッドロックが発生する状況
##1. クロスロックはプログラムのデッドロックを引き起こします: たとえば、スレッド A は R1 のロックを保持して R2 のロックを待ち、スレッド B は R2 のロックを保持します。そしてR1のロックを待ちます。 2. メモリ不足: たとえば、2 つのスレッド T1 と T2 があります。T1 は 10MB のメモリを取得し、T2 は 15MB のメモリを取得しました。T1 と T2 の両方が動作するには、30MB のメモリを取得する必要があります。ただし、残りの使用可能なメモリは 10MB です。このようにして、両方のスレッドが互いのメモリ リソースを解放するのを待ちます。 3. 質問と回答のデータ交換: サーバーは特定のポートを開いてクライアントのアクセスを待ちますが、クライアントがリクエストを送信した後、サーバーは何らかの理由でクライアントのリクエストを見逃し、クライアントは待機します。サーバーがクライアントからの要求の送信を待機している間、サーバーは応答します。 4. 無限ループによるデッドロック: 比較的一般的です。jstack などのツールではデッドロックは確認できませんが、プログラムが動作せず、CPU 使用率が高くなります。この種のデッドロックも同様です。これはシステム一時停止アニメーションと呼ばれ、トラブルシューティングと解決が困難です。 デッドロック関連の例public class Main { private final Object MUTEX_READ = new Object(); private final Object MUTEX_WRITE = new Object(); public void read(){ synchronized (MUTEX_READ){ synchronized (MUTEX_WRITE){ } } } public void write(){ synchronized (MUTEX_WRITE){ synchronized (MUTEX_READ){ } } } public static void main(String[] args) throws InterruptedException { Main m = new Main(); new Thread(()->{ while (true){ m.read(); } }).start(); new Thread(()->{ while (true){ m.write(); } }).start(); } }
以上がJavaでデッドロックが発生する状況は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。