当前位置: 首页 > 知识库问答 >
问题:

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

柯曦
2023-03-14

《Java并发实践》(Brian Goetz)中对此进行了阐述(重点是我的):

当Future.get抛出中断或超时异常,并且您知道程序不再需要结果时,请用F取消任务uture.cancel

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

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

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

共有1个答案

慕健
2023-03-14

等候

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

表示当前正在运行的线程(执行Future.get())正在等待Future.get()返回。通常,当线程等待时,它就像等待获取显式锁,Object.wait(),或者等待BlockingQueue中的阻塞方法。

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

所以当你告诉线程还没有启动时,你就错了。

 类似资料:
  • 问题内容: 这是我的代码: 如果删除,该表不会更新。但是对于select语句,我不需要那个。我很好奇为什么? 问题答案: 在DB- API 规范要求连接到数据库开始新的事务,默认情况下。您必须确认所做的任何更改,或放弃它们。 请注意,如果数据库支持自动提交功能,则必须首先将其关闭。 纯语句,因为它们从不对数据库进行任何更改,因此不必提交更改。

  • 据我所知,init block是一个在任何构造函数之前执行的块,每当该构造函数用于创建对象时。但是为什么规则在这里矛盾...... 这里,由于只形成了子类对象,那么为什么要调用父类的init块呢?

  • 问题内容: 这个问题已经在这里有了答案 : mysqli_fetch_assoc()期望参数/调用成员函数bind_param()错误。如何获取并修复实际的mysql错误? (1个答案) 4个月前关闭。 问题出在这里:我今天开始使用mysqli进行交换。没什么大不了的,只需要更改一些声明即可。一切正常,没有错误…除了我根本无法执行任何查询。我已经检查过两次和三次。我什至开始创建一种情况,它应该返回

  • 我在理解promise方面有一个(看似基本的)问题。首先是代码: 每个promise函数在添加到promise数组时被调用,而不是像我所想的那样调用Q.all。 我有什么不明白的? 如何在不立即调用所述promise的情况下将一系列promise排队?

  • 其他命令,如leinrepl和leindeps等工作正常。 结果如下 C:\Users\test Leiningen 2.0.0-Java1.7.0JavaHotSpot(TM)64位服务器虚拟机上的预览3 C:\Users\test 基于“默认”模板生成名为first的项目。JAVAlang.IllegalArgumentException:没有实现方法::使协议的读取器:#'clojure。J

  • 其他命令,如lein repl和lein deps等,工作良好。 Java 1.7.0 Java HotSpot(TM)64位服务器VM上的Leiningen 2.0.0-Preview3 C:\users\test>Lein new first