ブロッキング ServerSocket Accept() メソッドの中断
マルチスレッド アプリケーションでは、次のようなブロッキング メソッドを中断する必要がある場合があります。 ServerSocket.accept()。これは通常、正常なシャットダウンや管理コマンドに応答するために必要です。
従来の accept() メソッドは、クライアント接続が受信されるまでブロックします。この動作により、外部イベントへの応答やアプリケーションの即時終了が妨げられる可能性があります。
解決策: Close() を使用して割り込みを行う
ブロックを中断する効果的な解決策の 1 つaccept() メソッドは、別のスレッドから ServerSocket オブジェクトの close() を呼び出します。 close() が呼び出されると、accept() メソッドは SocketException をスローします。
<code class="java">// In the admin thread ServerSocket serverSocket = ...; serverSocket.close();</code>
割り込みの処理
accept() が実行されるメイン ループ内呼び出されると、SocketException をキャッチして正常に処理する必要があります。
<code class="java">while (listening) { try { // Accept client connection Socket clientSocket = serverSocket.accept(); // ... Process client connection } catch (SocketException e) { // Handle the interruption // ... Shut down client threads, admin thread, and main thread break; } }</code>
このアプローチの利点
以上がブロックしている ServerSocket.accept() メソッドを正常に中断する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。