java - 每当线程达到稳定状态时就发出信号终止它

标签 java multithreading concurrency concurrent-programming

假设我有两个线程 AB,都在运行。突然B决定终止A,因此A应该尽快终止。我不希望 A 立即终止,而是在它达到稳定状态时终止。

一个简单的解决方案是使用共享变量terminatePleaseA每次达到稳定状态时都会检查该变量。

代码原型(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/

相关文章:

java - 检查索引是否超出数组范围

c - 有透明的网络加速库吗?

python - Django 中的简单线程

java - JBoss OrderedExecutor + CountDownLatch 无法按我的预期工作?

go - 您是否需要使用互斥锁来锁定 const?

java - 为什么这不转换所有实例?

java - 当我希望执行插入查询时使用 Spring JPA 发布请求

java - 在 NeoMAD 项目中使用 java.util.Iterator 时出错

concurrency - 什么会导致代码阻塞?

java - java中的多线程服务器..服务文件的线程