如果在执行Future.get()时遇到InterruptedException,为什么还要执行Future.cancel()

时间:2015-08-13 11:28:08

标签: java multithreading concurrency

Java Concurrency in Practice(Brian Goetz)(亮点是我的):

  

Future.get抛出InterruptedExcetion 或TimeoutException并且您知道程序不再需要该结果时,使用Future.cancel取消任务

Future.get的Javadoc声明(突出显示是我的):

  

throws InterruptedException - 如果当前线程在等待时中断

所以,据我所知:如果我收到InterruptedException,那么我的任务还没有启动(因为执行的线程在等待时被中断)。那我为什么要取消我的任务?

1 个答案:

答案 0 :(得分:3)

等待

  

throws InterruptedException - 如果当前线程在等待时被中断

表示当前正在运行的线程(执行Future.get()的线程)正在等待Future.get()返回。通常,当线程等待时,就像等待获取explicit lockObject.wait()BlockingQueue中的阻塞方法一样。

现在关于本书的引用:如果您当前的线程被中断(因此InterruptedException)并且您将其解释为突然取消,那么您可能不再关心将来会返回什么,所以应该不管未来如何。

当你告诉线程尚未启动时,你错了。