2

我找到了这个解决方案来了解线程是否被中断。

public class OurThread extends Thread(){
    private volatile boolean stop = false;
    public void run(){
        while (!stop) {
             //Do your actions
        }
     }
 }

但是我的 run 方法只执行一次,所以把它放在一个 while 循环中是没有意义的。我发现的另一种方法是检查 Thread.isInterrupted() 标志,然后终止线程。我的 run() 方法很长,所以我必须多次检查这种情况,这会使我的代码变脏。

我必须将它应用到四个不同的过程中,所以我试图找到一个更简单、更清洁的解决方案。我希望是否有类似的东西:

try{//my code}
catch(interrumption)

问题是,由于我的线程被使用future.cancel()打断了,所以我的run()代码中没有抛出中断,所以我也不能这样做。

有什么建议吗?现在,如果线程已被取消,我会在代码之间检查很多次。谢谢 :)

4

2 回答 2

5

首先,不要扩展 Thread,你应该实现 Runnable 或 Callable。

其次,您可以添加一个方法,例如

static void checkInterrupt() {
    if(Thread.currentThread().isInterrupted()) 
         throw new IllegalStateException("Interrupted");
}

并将其放在四个地方。这不会添加太多代码,也不会像不会停止的任务那样丑陋。

于 2012-12-18T14:12:45.523 回答
1

您的任务(可运行或可调用)不能被中断,除非它具有响应中断的内置机制。这也取决于您的设计;比如,当确切的任务预计会被中断时。通常我们会在任务达到安全状态时进行。

因此,您检查是否收到中​​断,然后做出适当的响应。要重用代码,您可以使用@Peter 建议的方法。

于 2012-12-18T14:22:19.493 回答