在多執行緒伺服器應用程式中,主執行緒通常有一個循環,該循環呼叫accept()用於處理傳入客戶端連線的ServerSocket。但是,如果收到關閉命令,例如“退出”,則中斷阻塞的accept()方法並正常退出程序就變得具有挑戰性。
要解決此問題,請考慮以下方法:
使用另一個執行緒的close() 方法:
範例程式碼:
主執行緒:
<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>
管理執行緒:
<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>透過遵循這種方法,接受() 方法可以被另一個執行緒關閉ServerSocket 時拋出的SocketException 中斷,從而使程式能夠優雅地退出以回應關閉命令。
以上是如何優雅地終止多執行緒伺服器中的阻塞 `ServerSocket.accept()` 迴圈?的詳細內容。更多資訊請關注PHP中文網其他相關文章!