Heim  >  Artikel  >  Java  >  Wie unterbreche ich eine blockierende ServerSocket.accept()-Methode ordnungsgemäß?

Wie unterbreche ich eine blockierende ServerSocket.accept()-Methode ordnungsgemäß?

Susan Sarandon
Susan SarandonOriginal
2024-10-27 18:58:30462Durchsuche

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

Unterbrechen einer blockierenden ServerSocket Accept()-Methode

In einer Multithread-Anwendung kann es notwendig sein, eine blockierende Methode zu unterbrechen, z ServerSocket.accept(). Dies ist normalerweise für ein ordnungsgemäßes Herunterfahren oder zum Reagieren auf Verwaltungsbefehle erforderlich.

Die herkömmliche Methode „accept()“ blockiert, bis eine Clientverbindung empfangen wird. Dieses Verhalten kann die Fähigkeit beeinträchtigen, auf externe Ereignisse zu reagieren oder die Anwendung umgehend zu beenden.

Lösung: Close() zum Unterbrechen verwenden

Eine effektive Lösung, um die Blockierung zu unterbrechen Die Methode „accept()“ besteht darin, close() für das ServerSocket-Objekt von einem separaten Thread aus aufzurufen. Wenn close() aufgerufen wird, löst die Methode „accept()“ eine SocketException aus.

<code class="java">// In the admin thread
ServerSocket serverSocket = ...;
serverSocket.close();</code>

Umgang mit der Unterbrechung

Innerhalb der Hauptschleife, in der sich „accept()“ befindet Beim Aufruf ist es notwendig, die SocketException abzufangen und ordnungsgemäß zu behandeln.

<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>

Vorteile dieses Ansatzes

  • Ermöglicht ein ordnungsgemäßes Herunterfahren der Anwendung , auch während Accept() blockiert.
  • Bietet eine zuverlässige Möglichkeit, die Blockierungsmethode zu unterbrechen, ohne die ServerSocket-Klasse selbst ändern zu müssen.

Das obige ist der detaillierte Inhalt vonWie unterbreche ich eine blockierende ServerSocket.accept()-Methode ordnungsgemäß?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn