我一直在处理一个应用程序(java-6),在该应用程序中,我需要终止表单提交时的线程。应用程序处理几个请求,每个请求都有自己的“终止我”按钮,用户点击按钮,我得到线程id,我标记被中断的线程。
我曾经有一个经常被称为代码(日志)的部分,我定期检查CurrentThread是否被标记,如果是,它会抛出一个RunTimeException。这就是我过去能够终止线程的方式。不幸的是,由于重构,这个部分已经被删除了,现在我无法找到一个足够频繁地检查currentThread是否被标记的合适位置。
另一种方法是以某种方式“强迫”线程定期检查自己的状态(如果被标记为中断,则抛出异常)。如果每个线程都是我通过扩展Thread或实现Runnable来编写的,那就相当容易了,但事实并非如此。有没有办法(也许在Java 7中)来执行“正常”线程?
发布于 2014-01-29 16:30:29
Java在设计上是协作的(除非您想使用不推荐的stop()方法-这是出于很好的理由而被废弃的)。
所以,如果一条线在死亡中不合作,你就无能为力了。有几种检查中断标志并抛出InterruptedException的方法。
但是,除非您正确地处理异常(它清除了标志,如果无法处理,则需要再次设置它),否则该标志很容易丢失。
您需要更改代码以重新引入检查。如果他们不允许您更改代码,那么我就知道了一些方法(比如用构建中的固定版本替换JAR中的类文件)。但到头来,你真的必须改变来源。
https://stackoverflow.com/questions/21436570
复制相似问题