繁体   English   中英

Java关闭钩子与ExecutorService

[英]Java shutdown hooks with ExecutorService

关闭我的应用程序时,我遇到了一个问题,那就是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);
    }
}

主类的关机钩:

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 因此,有可能在启动Shutdown挂钩之前关闭ExecutorService

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM