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

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

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

另请参阅Sun Concurrency Tutorial中的相应页面 ,正如另一个解决方案所示。

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

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

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

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

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

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