2

将 run 方法的内容包装在 while 循环中是否足以检查 THread 是否被中断以使任何线程可中断

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

2 回答 2

2

线程如何支持自己的中断?这取决于它目前在做什么。如果线程频繁调用抛出 InterruptedException 的方法,它会在捕获该异常后简单地从 run 方法返回。

参考文档

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

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

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

于 2013-02-21T09:00:50.120 回答
0

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

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

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

于 2013-02-21T09:12:45.927 回答