设计可中断的Runnables

时间:2013-02-21 08:56:09

标签: java multithreading

在while循环中包含run方法的内容是否足以检查THread是否因为任何Thread可中断而被中断

public void run () {
  while (!Thread.interrupted()) {
     do something.
  }    
}

2 个答案:

答案 0 :(得分:2)

  

线程如何支持自己的中断?这取决于什么   它目前正在做。如果线程经常调用方法   抛出InterruptedException,它只是从run方法返回   在它捕获了那个例外之后。

Reference documentation

例如,如果你的线程在工作之间进入睡眠状态,那么最好抓住InterruptedException

public void run(){
 while(true)
    try {
        Thread.sleep(4000);
    } catch (InterruptedException e) {
        // We've been interrupted: no more messages.
        return;
    }
}

如果您的线程长时间运行,您可以定期检查调用Thread.interrupted,如果收到中断,则返回true。

答案 1 :(得分:0)

interrupted()是静态方法,用于检查当前线程是否被中断。 isInterrupted()是一个检查调用的Thread对象的实例。 对于当前线程使用

if(!(Thread.interrupted())){//do something}

当Thread对象调用时使用if(myThread.isInterrupted()){//do something }