在java中断一个线程

Ben*_*s G 2 java multithreading future interrupt

我发现这个解决方案知道一个线程是否被中断了.

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

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

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

try{//my code}
catch(interrumption)
Run Code Online (Sandbox Code Playgroud)

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

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

Pet*_*rey 5

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

其次你可以添加一个方法

static void checkInterrupt() {
    if(Thread.currentThread().isInterrupted()) 
         throw new IllegalStateException("Interrupted");
}
Run Code Online (Sandbox Code Playgroud)

把它放在四个地方.这不会增加太多代码,也不会像不会停止的任务一样难看.

  • +1.或许可以解释一下,实施`Runnable`是另类? (2认同)