2012-11-12 179 views
0

我有一个可能数量的线程的应用程序。 basicly线程应该工作的:终止线程池中的线程

  • 主线
  • CalculationThread
  • CalculationThread
  • CalculationThread

添加/执行这些线程的FixedThreadPool是没问题的。线程本身调用Mainthread中的某个函数来提交结果。在这个步骤之后,线程应该睡觉,直到它将被再次调用以用于下一次锻炼。

Mainthread保存对CalculationThread的引用,将更新提交给线程并将其读入池以开始下一次计算。

我的问题:如何强制执行特定线程的超时?如果发生无限循环,则执行此超时也必须起作用

回答

1

如果没有来自线程的合作,至少不能以合理的方式执行超时。您应该编写计算任务,以便它们符合Java中断机制。基本上,这意味着偶尔检查Thread.interrupted返回值并在true上中止。

唯一的其他选择是笨蛋–和弃用– Thread.stop,这可以造成一般混乱,尤其是在池管理线程上完成时。

+0

问题是线程调用/包装外部库文件。那么是否有一种方法可以将线程以最小的附带损害抛出? – jwacalex

+0

不幸的是没有。这是一个很常见的问题,我从来没有读过任何更好的建议。 –

+0

为什么不使用[Guava](http://code.google.com/p/guava-libraries/wiki/ListenableFutureExplained)的'ListenableFuture'和'FutureCallback',这样你可以做一些事情,如果它工作或失败? – ElderMael