Java Concurrency in Practice(Brian Goetz)(亮点是我的):
当 Future.get抛出InterruptedExcetion 或TimeoutException并且您知道程序不再需要该结果时,使用Future.cancel取消任务
Future.get的Javadoc声明(突出显示是我的):
throws InterruptedException - 如果当前线程在等待时中断
所以,据我所知:如果我收到InterruptedException,那么我的任务还没有启动(因为执行的线程在等待时被中断)。那我为什么要取消我的任务?
答案 0 :(得分:3)
等待
throws InterruptedException - 如果当前线程在等待时被中断
表示当前正在运行的线程(执行Future.get()
的线程)正在等待Future.get()
返回。通常,当线程等待时,就像等待获取explicit lock,Object.wait()
或BlockingQueue
中的阻塞方法一样。
现在关于本书的引用:如果您当前的线程被中断(因此InterruptedException
)并且您将其解释为突然取消,那么您可能不再关心将来会返回什么,所以应该不管未来如何。
当你告诉线程尚未启动时,你错了。