ホームページ >Java >&#&チュートリアル >記事の本質を捉えた質問ベースのタイトルをいくつか紹介します。 * Java でブロッキングしている ServerSocket `accept()` メソッドを中断するにはどうすればよいですか? * Java サーバーの正常なシャットダウン: 割り込み
ServerSocket Accept() メソッドの中断
Java では、ServerSocket クラスは受信クライアント接続要求を待機する accept() メソッドを提供します。このメソッドは、クライアントが接続するまで、場合によっては無期限にブロックします。マルチスレッド サーバー アプリケーションを設計する場合、外部イベントに応じてこのブロック操作を中断する必要がある場合があります。
質問で説明されている、「管理者」スレッドがサーバー (以下を含む) をシャットダウンする必要があるシナリオを考えてみましょう。クライアント スレッド) とメイン スレッド。メインスレッドで accept() 呼び出しがブロックされているため、サーバーは管理スレッドからのシャットダウン要求に応答できません。
これを解決するには、Java コミュニティは close() メソッドを使用して accept() 呼び出しを中断することを推奨しています。 。方法は次のとおりです。
別のスレッド (この場合は、管理スレッド) から、ServerSocket オブジェクトの close() メソッドを呼び出します。これにより、メイン スレッドの accept() 呼び出しによって SocketException がスローされます。
メイン スレッドの while(listening) ループ内で、accept() によってスローされた SocketException を処理して、サーバーを正常にシャットダウンします。
このアプローチを説明するコード スニペットを次に示します。
<code class="java">ServerSocket serverSocket = new ServerSocket(port); while (listening) { try { Socket clientSocket = serverSocket.accept(); // Handle client connection } catch (SocketException e) { // Shutdown the server and other threads listening = false; // Notify client threads to disconnect } }</code>
close() メソッドを使用してブロックしている accept() 呼び出しを中断することで、応答できます。外部イベントに応じてサーバーを正常にシャットダウンします。
以上が記事の本質を捉えた質問ベースのタイトルをいくつか紹介します。 * Java でブロッキングしている ServerSocket `accept()` メソッドを中断するにはどうすればよいですか? * Java サーバーの正常なシャットダウン: 割り込みの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。