gpt4 book ai didi

java - 关闭tomcat时如何关闭spring bean中的ThreadPoolExecutor?

转载 作者:行者123 更新时间:2023-12-04 05:59:42 25 4
gpt4 key购买 nike

我在spring bean中创建了一个threadpoolexecutor,所以我需要在tomcat关闭时关闭这个执行器。

     public class PersistBO implements InitializingBean {

private ThreadPoolExecutor executer;

public void shutdownExecutor() {
executer.shutdown();
}

@Override
public void afterPropertiesSet() throws Exception {
taskQueue = new LinkedBlockingQueue<Runnable>(queueLength);
executer = new ThreadPoolExecutor(minThread, maxThread, threadKeepAliveTime,
TimeUnit.SECONDS, taskQueue, new ThreadPoolExecutor.DiscardOldestPolicy());
}

我在谷歌上搜索了解决方案并得到了结果。那就是给 java.lang.runtime 添加一个shutdownhook。但是,java 文档说 java.lang.Runtime#shutdownHook 在最后一个非守护进程线程退出时被调用。所以这是一个死锁。 spring bean 有没有关闭执行器的解决方案?

最佳答案

我猜执行器的生命周期应该取决于您的应用程序的生命周期,而不是整个 Tomcat。您可以在 Tomcat 仍在运行时停止应用程序,因此 Runtime.shutdownHook()不适用。

由于您已经使用 Spring 及其 InitializingBean对于初始化,您可以使用 DispasableBean 在关闭应用程序上下文时执行清理:

public class PersistBO implements InitializingBean, DisposableBean { 
public void destroy() {
shutdownExecutor();
}
...
}

关于java - 关闭tomcat时如何关闭spring bean中的ThreadPoolExecutor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9076476/

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