ホームページ  >  記事  >  Java  >  記事の本質を捉えた質問ベースのタイトルをいくつか紹介します。 * Java でブロッキングしている ServerSocket `accept()` メソッドを中断するにはどうすればよいですか? * Java サーバーの正常なシャットダウン: 割り込み

記事の本質を捉えた質問ベースのタイトルをいくつか紹介します。 * Java でブロッキングしている ServerSocket `accept()` メソッドを中断するにはどうすればよいですか? * Java サーバーの正常なシャットダウン: 割り込み

DDD
DDDオリジナル
2024-10-27 09:45:03645ブラウズ

Here are a few question-based titles that capture the essence of the article:

* How to Interrupt a Blocking ServerSocket `accept()` Method in Java?
* Gracefully Shutting Down a Java Server: Interrupting the `accept()` Method
* What Happens When You Call

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。