假设我有两个线程 A
和 B
,都在运行。突然B
决定终止A
,因此A
应该尽快终止。我不希望 A
立即终止,而是在它达到稳定状态时终止。
一个简单的解决方案是使用共享变量terminatePlease
,A
每次达到稳定状态时都会检查该变量。
代码原型(prototype)如下:
class A extends Thread {
boolean terminatePlease;
public void run() {
while (true) {
if (terminatePlease)
return;
doUninterruptableTasks();
}
}
}
还有其他并发模式来处理这种情况吗?
最佳答案
就是这个想法,是的。不过, boolean 值应该是不稳定的,才能使该解决方案发挥作用。
但是你甚至不需要这个标志,因为每个线程已经有一个:中断标志。因此,您可以从线程 B 调用 a.interrupt();
,并让线程 A 执行以下操作:
public void run() {
while (!Thread.currentThread().isInterrupted()) {
doUninterruptableTasks();
}
}
但请注意,中断阻塞在等待状态的线程将使阻塞方法抛出 InterruptedException,以便尽快停止运行。如果您不希望这样,请使用 volatile 标志。
关于java - 每当线程达到稳定状态时就发出信号终止它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14172785/