Yod*_*oda 3 java multithreading
该线程一直在工作,直到它被中断,但它不时休眠:
public void run() {
while (!Thread.interrupted()) {
//A TASK HERE
try {
Thread.sleep((long) (500 + Math.random() * 100));
} catch (InterruptedException e) {
interrupt(); //it was interrupted while it was sleeping
}
}
}
Run Code Online (Sandbox Code Playgroud)
目的是通过中断线程来杀死线程。我可以像我一样重新中断自己还是应该stop = true在异常条款中设置一个标志?
捕捉循环外的中断:
public void run() {
try {
while (true) {
//A TASK HERE
Thread.sleep((long) (500 + Math.random() * 100));
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
Run Code Online (Sandbox Code Playgroud)
无论您在哪里捕获InterruptedException,如果您还没有真正处理它,最好重新中断当前线程,并且您不能简单地抛出InterruptedException(例如,因为它在一个没有声明它抛出InterruptedException或Exception或Throwable)。
这允许run()方法的调用者知道执行被中断,因此他们也可以停止他们正在做的事情。
您可能决定不重新中断线程的主要情况是,如果您正在编写某种线程框架(如 Executors),您可以重用先前中断的线程来执行下一个任务。