从套接字等待输入时阻止停止/中断线程

时间:2009-06-21 18:32:56

标签: java multithreading

正如标题所说,我需要一种方法来阻止或中断被套接字输入阻塞的线程。

6 个答案:

答案 0 :(得分:12)

您可以简单地从另一个线程关闭()IO流/套接字。然后,如果结果IOException由于close或其他原因,您可以检查volatile布尔字段。我认为收盘可能会导致java.net.SocketException: Socket closed例外。

答案 1 :(得分:8)

Thread.interrupt()应该是您正在寻找的方法。 确保您的输入访问方法还检查InterruptedException和ClosedByInterruptException。

另请参阅相应的page in the Sun Concurrency Tutorial,正如另一种解决方案所暗示的那样。

答案 2 :(得分:5)

套接字允许通过setSoTimeout()方法设置超时。这是阻止它们阻止的首选方法。

否则,您可能需要查看允许非阻塞I / O的nio程序包,但需要花费更多的手动工作来管理传入和传出数据。

答案 3 :(得分:4)

我没有看到socket.closeInput()。但是,我找到了socket.shutdownInput()。在调用之后(从一个自然阻塞的不同线程),我对bufferedReader.close()的调用工作正常! (我跟着调用了printWriter.close()socket.close()

答案 4 :(得分:1)

尝试使用sock.closeInput(),然后使用sock.close()

答案 5 :(得分:0)

关闭套接字,读取将被解除阻塞(将以IOException的子类退出)。读取对Thread.interrupt的响应取决于平台(例如,在Solaris 10上不起作用)。