In einer Multithread-Serveranwendung verfügt der Hauptthread normalerweise über eine Schleife, die Accept() aufruft ein ServerSocket zur Verarbeitung eingehender Clientverbindungen. Wenn jedoch ein Befehl zum Herunterfahren empfangen wird, z. B. „exit“, wird es schwierig, die blockierende Methode „accept()“ zu unterbrechen und das Programm ordnungsgemäß zu beenden.
Um dieses Problem zu beheben, ziehen Sie den folgenden Ansatz in Betracht:
Verwenden Sie die Methode close() aus einem anderen Thread:
Beispielcode:
Hauptthread:
<code class="java">while (listening) { try { Socket clientSocket = serverSocket.accept(); // Start client thread and add it to collection } catch (SocketException e) { // Shutdown has been initiated, break out of loop listening = false; } }</code>
Admin-Thread:
<code class="java">// Create and connect to listening server socket Socket adminSocket = new Socket("localhost", port); // Wait for 'exit' command ... // Close the admin socket to interrupt the main thread adminSocket.close();</code>
Wenn Sie diesem Ansatz folgen, akzeptieren Sie ()-Methode kann durch eine SocketException unterbrochen werden, die ausgelöst wird, wenn der ServerSocket von einem anderen Thread geschlossen wird, wodurch das Programm als Reaktion auf Befehle zum Herunterfahren ordnungsgemäß beendet werden kann.
Das obige ist der detaillierte Inhalt vonWie kann man eine blockierende „ServerSocket.accept()'-Schleife in einem Multithread-Server ordnungsgemäß beenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!