gpt4 book ai didi

java - 正常关闭包含连接的 Java 任务

转载 作者:行者123 更新时间:2023-12-01 09:00:23 26 4
gpt4 key购买 nike

我有许多由执行器服务管理的可运行任务。

这些任务本质上是 JMS 队列轮询器并包含它们自己的连接。

例如:

ExecutorService executor = Executors.newFixedThreadPool(...);
executor.submit(new MyListener());

我的听众:

public class MyListener implements Runnable {
@Override
public void run() {
// Create my JMS connection here
}
}

如何优雅地关闭每个任务中的 JMS 连接,然后继续关闭每个线程?

我在使用 shutdown() 关闭执行程序服务时遇到问题。

我需要使用 shutdownNow() 强制中断,但是,在没有显式调用 .close() 的情况下,如何确定我的 JMS 连接已关闭?

我是否缺少一个接口(interface),允许在我尝试停止任务时执行关闭 Hook ?

最佳答案

这是我的解决方案,利用原子 boolean 值的建议,优雅地关闭持有连接的线程:

MyRunnable implements Runnable {

private volatile boolean isActive = true;

public void run() {
while(isActive && !Thread.currentThread().isInterrupted()) {
...
}
}

public void stop() {
isActive = false;
}
}

主线程:

private void myShutdownHook() {
myRunnableInstance.stop();

// Can safely shutdown executor now...
}

关于java - 正常关闭包含连接的 Java 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41721435/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com