gpt4 book ai didi

Java 关闭钩子(Hook)与 ExecutorService

转载 作者:行者123 更新时间:2023-12-01 15:18:36 26 4
gpt4 key购买 nike

我在关闭应用程序时遇到问题,ExecutorService 已终止...处理此问题的好方法是什么?

public class TradingLock {

private ExecutorService executorService;
private List<TradingHaltedListener> listeners=new ArrayList<>();
public TradingLock(ExecutorService executorService) {
super();
this.executorService = executorService;
}

public void haltTrading(){
for (final TradingHaltedListener listener: listeners){
executorService.execute(new Runnable() {
@Override
public void run() {
listener.onTradingHalted();
}
});
}
}
public synchronized void addTradingHaltedListener(TradingHaltedListener listener){
this.listeners.add(listener);
}
}

主类的关闭钩子(Hook):

Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
tradingLock.haltTrading();
}
});

最佳答案

我发现,如果我创建一个扩展 Thread 的类并在 addShutdownHook 函数中使用它,那么它运行时不会出现任何问题。

 public class ShutdownHandler extends Thread {
public void run(){
// do all the work to clean up before shutting down
}
}

然后将其添加到主类中

 Runtime.getRuntime().addShutdownHook(new ShutdownHandler());

编辑

阅读更多有关 ExecutorService 的信息后,可能是在应用程序开始退出时收到 shutdownshutdownNow 。当应用程序开始其关闭序列时,会触发 addShutdownHook。因此,ExecutorService 可能会在您的 Shutdown Hook 启动之前关闭。

关于Java 关闭钩子(Hook)与 ExecutorService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11291819/

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