我有一個線程處理的套接字連接:如何結束線程處理套接字連接?
BufferedReader socketInput = new BufferedReader(new InputStreamReader(mySocket.getInputStream()));
while (true)
{
String line = socketInput.readLine();
// do stuff
}
正如我在本網站上幾個答案讀過,推薦的解決方案是使用一個標誌,一個線程組和我(插座處理)螺紋當該標誌改變狀態時檢查並終止自己。喜歡的東西:
while (!done)
{
String line = socketInput.readLine();
// do stuff
}
但是,這可能會被卡住時readLine()
仍在等待輸入。我想我可以設置超時:
mySocket.setSoTimeout(100);
while (!done)
{
String line = socketInput.readLine();
// do stuff
}
這可能會工作,但我還是希望我的線程之前得到一個100毫秒的延遲「實現」標誌的狀態改變。
線程是否有辦法「馬上」意識到它應該結束?如果不是,我的解決方案(超時和標誌done
)是否正確?
編輯:我澄清,socketInput
是BufferedReader
類型(或者我考慮Scanner
)的。
參見http://stackoverflow.com/questions/12315149/interrupt-stop-thread-with-socket-io -blocking-operation – Matthieu
我編輯了我的答案,試圖證明帶有頻道的異步I/O並不是什麼大不了的事情。我希望你會發現它很有趣,新年快樂! :) – Matthieu