在java中断一个线程

时间:2012-12-18 14:08:12

标签: java multithreading interrupt future

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

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

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

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

try{//my code}
catch(interrumption)

问题是,由于我的线程是通过使用future.cancel()进行中断的,所以我的run()代码中没有抛出中断,然后我也无法做到这一点。

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

2 个答案:

答案 0 :(得分:5)

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

其次,你可以添加像

这样的方法
static void checkInterrupt() {
    if(Thread.currentThread().isInterrupted()) 
         throw new IllegalStateException("Interrupted");
}

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

答案 1 :(得分:1)

您的任务(Runnable或Callable)不能被中断,除非它具有内置机制来响应中断。这也取决于你的设计;比如,当确切的任务期望被打断时。通常我们在任务达到安全状态时执行。

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