java:停止安全线程;不使用while和boolean标志

时间:2011-09-03 08:01:10

标签: java multithreading thread-safety

我有一个线程只执行一次任务。如果它无法在适当的时间内完成,我想阻止它。我怎样才能做到这一点?我之前看到的所有方法都使用了while循环和一个多次执行任务的标志;但我的任务不是那样的。

谢谢大家。

2 个答案:

答案 0 :(得分:9)

停止任务的唯一干净方法是中断它(或设置一些其他标志),这会导致线程正常停止。如果代码中没有外部循环,则可以在可以安全中断工作流程的各个关键点进行检查。对于大型代码库来说,这可能很繁琐,但这是最好的方法。

如果您有一个无法控制的库,则可以使用Thread.stop(),但这会使您的应用程序处于未定义状态。它不会杀死线程,但会触发一个ThreadDeath错误,它将展开堆栈并调用finally块等。问题是它会发生在一个有效的随机代码行中(甚至是一行代码的一半) 线程可以忽略ThreadDeath错误,具体取决于代码的编写方式。

解决这个问题的唯一方法是在另一个进程中运行不受信任的代码,然后在花费太长时间时终止该进程。这可能会留下临时文件,但是更安全。

答案 1 :(得分:0)

使用java.util.TimerTask类 - 它用于计划一次性任务或由计时器重复执行。