【问题标题】:Require FutureTask to be started before cancelled要求 FutureTask 在取消之前启动
【发布时间】:2010-12-14 12:43:06
【问题描述】:

在我的 Callable 代码中,我使用信号将多个结束行为通知给另一个线程。 Callable 对象在 Executor 中与 FutureTasks 一起排队。排队后也有可能被取消。

现在,我的问题是我依赖于至少正在启动的任务才能让我的信号正常工作,但如果执行程序在有机会运行它之前被标记为已取消,它看起来只是跳过一个任务。

那么,有没有办法保证任务在运行时始终启动,并始终取消(通过 InterruptedException)。

另外,你能检查一个任务是否没有开始但失败了吗?

【问题讨论】:

  • 我怀疑答案是简单的“不”

标签: java multithreading concurrency futuretask


【解决方案1】:

您可能可以继承 FutureTask 类并覆盖其done() 方法来执行信号。根据文档,即使任务已被取消,也应该调用此方法。

【讨论】:

  • 该解决方案效果很好!我添加了一个变量 hasStarted 来跟踪是否调用了 Callable.run(),并在 FutureTask.done() 中添加了一些信号,如果 hasStarted 为 false,则会触发。
猜你喜欢
  • 2019-11-11
  • 1970-01-01
  • 1970-01-01
  • 2019-02-05
  • 2019-11-26
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多