将 run 方法的内容包装在 while 循环中是否足以检查 THread 是否被中断以使任何线程可中断
public void run () {
while (!Thread.interrupted()) {
do something.
}
}
将 run 方法的内容包装在 while 循环中是否足以检查 THread 是否被中断以使任何线程可中断
public void run () {
while (!Thread.interrupted()) {
do something.
}
}
线程如何支持自己的中断?这取决于它目前在做什么。如果线程频繁调用抛出 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。
interrupted() 是检查当前线程是否被中断的静态方法。isInterrupted() 是检查调用的 Thread 对象的实例。对于当前线程使用
if(!(Thread.interrupted())){//do something}
当调用 Thread 对象时使用if(myThread.isInterrupted()){//do something
}