处理不可中断的阻塞-JCIP7.1读书笔记
[本文是我对Java Concurrency In Practice 7.1的归纳和总结. ?转载请注明作者和出处, ?如有谬误, 欢迎在评论中指正. ]
并不是所有的阻塞都是可中断的, 比如InputStream.read方法. 在检测到输入数据可用, 到达流末尾或者抛出异常前, 该方法一直阻塞. 而且阻塞的时候不会检查中断标记, 所以中断线程无法使read从阻塞状态返回. 但是关闭流可以使得read方法抛出异常, 从而从阻塞状态返回.?
public static void main(String[] args) {CancellingExecutor executor = new CancellingExecutor();SocketUsingTask task = new SocketUsingTask();task.setSocket(new Socket("www.baidu.com", 80));Future<V> future = executor.submit(task);future.cancel(true);}