通过中断它们来终止线程 - java 6

时间:2014-01-29 16:16:01

标签: java multithreading interrupt

我一直在处理一个应用程序(java-6),我需要在表单提交时终止一个线程。 应用程序处理多个请求,每个都有“终止我”按钮,用户点击按钮,我得到线程ID,我标记线程中断。

我曾经经常调用代码的一部分(Logging),我定期检查CurrentThread是否被标记,如果是,则抛出RunTimeException。这就是我过去能够终止线程的方式。不幸的是,由于重构,此部分已被删除,现在我找不到足够频繁检查currentThread是否被标记的合适位置。

一种不同的方法是以某种方式“强制”线程定期检查他们自己的状态(如果被标记为中断则抛出异常)。如果我通过扩展Thread或实现Runnable来编写每个线程,那将是相当容易的,但事实并非如此。有没有办法(可能在Java 7中)执行“正常”线程?

1 个答案:

答案 0 :(得分:1)

Java线程在设计上是合作的(除非您想使用已弃用的stop()方法 - 它已被弃用了。)

因此,如果一个线程在它的死亡中没有合作,那么你几乎无能为力。有几种方法可以检查中断的标志并抛出InterruptedException

但除非你正确处理异常(它清除了标志,如果你无法处理它,你需要再次设置它),标志很容易丢失。

您需要更改代码以重新引入检查。如果他们不允许你更改代码,那么我知道了几个技巧(比如在构建中用固定版本替换JAR中的类文件)。但最后,你真的必须改变消息来源。