假设我启动了一个线程,并且有这样的内容:
...//initiate all the socket connection
future = executor.submit
( new Runnable()
{ public void run()
{ ...
...
while ((str = in.readLine()) != null)
{ //do something here
}
}
);
executor 是一个 ExecutorService 对象,in 是一个 BufferedReader 对象
我知道您可以从不同的线程关闭套接字来中断该线程。但是当我尝试使用 future.cancel(true) 方法时,即使它返回 true,线程似乎仍在运行,有人知道为什么吗?或者 in.readLine() 不能以这种方式中断?
你能用 Future.cancel(true) 中断 BufferedReader.readLine() 吗?
All future.cancel(true)
就是打电话thread.interrupt()
在关联的线程上。这会导致sleep()
and wait()
操作抛出一个InterruptedException
并会打断一些特殊的蔚来频道 http://docs.oracle.com/javase/6/docs/api/java/nio/channels/InterruptibleChannel.html.
但机会是你的BufferedReader
不会被中断,因为它很可能是从“正常”套接字或文件读取。正如您提到的,从不同线程关闭底层套接字是终止此类 IO 方法的最佳方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)