aka*_*okd 12
您可以简单地从另一个线程关闭()IO流/套接字.然后,如果结果IOException由于close或其他原因,您可以检查volatile布尔字段.我认为收盘可能会导致java.net.SocketException: Socket closed例外.
Thread.interrupt()应该是您正在寻找的方法.确保您的输入访问方法还检查InterruptedException和ClosedByInterruptException.
另请参阅Sun Concurrency Tutorial中的相应页面,正如另一个解决方案所示.
套接字允许通过该setSoTimeout()方法设置超时.这是阻止它们阻止的首选方法.
否则,您可能希望查看nio允许非阻塞I/O 的程序包,但需要花费更多的手动工作来管理传入和传出数据.