如何優雅地跳出阻塞的ServerSocketaccept() 循環
在多執行緒伺服器應用程式中,主執行緒通常有一個循環,該循環呼叫accept()用於處理傳入客戶端連線的ServerSocket。但是,如果收到關閉命令,例如“退出”,則中斷阻塞的accept()方法並正常退出程序就變得具有挑戰性。
要解決此問題,請考慮以下方法:
使用另一個執行緒的close() 方法:
- 在一個單獨的執行緒(例如管理執行緒)中,建立一個Socket 並將其連接到監聽已知連接埠上的ServerSocket。這將從管理線程本身創建一個虛假的傳入連接。
- 當管理執行緒收到「退出」指令時,它會在其連接的套接字上呼叫 close()。
- 在主執行緒中,一旦 ServerSocket 關閉,accept() 呼叫將拋出 SocketException,允許主執行緒跳出循環並繼續關閉過程。
範例程式碼:
主執行緒:
<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中文網其他相關文章!
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
刺客信條陰影:貝殼謎語解決方案
2 週前ByDDD
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

禪工作室 13.0.1
強大的PHP整合開發環境

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)