我有一个线程处理的套接字连接:如何结束线程处理套接字连接?
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