ホームページ  >  記事  >  Java  >  ブロックしている ServerSocket.accept() メソッドを正常に中断する方法

ブロックしている ServerSocket.accept() メソッドを正常に中断する方法

Susan Sarandon
Susan Sarandonオリジナル
2024-10-27 18:58:30460ブラウズ

How to Gracefully Interrupt a Blocking ServerSocket.accept() Method?

ブロッキング 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>

このアプローチの利点

  • アプリケーションの正常なシャットダウンが可能になります。 accept() がブロックしている間でも。
  • ServerSocket クラス自体を変更することなく、ブロック メソッドを中断する信頼性の高い方法を提供します。

以上がブロックしている ServerSocket.accept() メソッドを正常に中断する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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