在多線程應用程序我有一個線程具有:突圍UDP套接字的接收方法
datagramSocket.receive(packet);
它等待分組 - 執行被阻塞與接收方法。 同時其他一些線程想關閉這個「等待」線程。
我該如何做到這一點?
目前,我剛剛閉幕導致SocketException拋出的插座,這是我想是不是最好的主意...
任何幫助嗎?
在多線程應用程序我有一個線程具有:突圍UDP套接字的接收方法
datagramSocket.receive(packet);
它等待分組 - 執行被阻塞與接收方法。 同時其他一些線程想關閉這個「等待」線程。
我該如何做到這一點?
目前,我剛剛閉幕導致SocketException拋出的插座,這是我想是不是最好的主意...
任何幫助嗎?
自己關閉套接字不是必需的一個壞主意:我們不能說沒有看到上下文,並告訴是否有任何設計錯誤,但我不喜歡它。
另一種方法是把一個循環,檢查一些volatile
標誌(因爲它有可能是已經)中的代碼,並設置超時:
while (on) {
//...
datagramSocket.setSoTimeout(5000);
datagramSocket.receive(packet);
//...
}
您可以設置超時在'DatagramSocket'或者您也可以向'Thread'發出一箇中斷。 –
這不是一個壞主意 - 它比浪費的,延遲時間超時的解決方案要好。另一種無浪費,無延遲的解決方案是設置'終止'易失性標誌並向UDP線程發送一個空的數據報,所以使receive()調用返回,以便它可以檢查標誌並終止。 –
..或甚至發送一個'請關閉'數據報在你正在使用的任何消息協議。 –