gpt4 book ai didi

java - 服务器启动时初始化同步线程池执行器

转载 作者:行者123 更新时间:2023-12-02 07:24:34 36 4
gpt4 key购买 nike

我想用我定义的属性初始化同步静态单例ThreadPool Executor。

我希望它在整个应用程序中都可用,并且应该在服务器重新启动或停止时销毁。

public class ThreadPoolExecutor extends java.util.concurrent.ThreadPoolExecutor {
private static Properties properties;
static {
try {
properties.load(ThreadPoolExecutor .class.getClassLoader().getResourceAsStream("config.properties"));
} catch (IOException e) {
e.printStackTrace();
}
}
static final int defaultCorePoolSize = Integer.valueOf((String) properties.get("CORE_POOL_SIZE"));
static final int defaultMaximumPoolSize = Integer.valueOf((String) properties.get("MAX_POOL_SIZE"));
static final long defaultKeepAliveTime = Integer.valueOf((String) properties.get("KEEP_ALIVE_TIME"));
static final TimeUnit defaultTimeUnit = TimeUnit.MINUTES;
static final BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<Runnable>();
private static ThreadPoolExecutor instance;

private ThreadPoolExecutor() {
super(defaultCorePoolSize, defaultMaximumPoolSize, defaultKeepAliveTime, defaultTimeUnit, workQueue);
}

synchronized static ThreadPoolExecutor getInstance() {
if (instance == null) {
instance = new ThreadPoolExecutor();
}
return instance;
}

这就是我到目前为止所做的(我是多线程的新手)。

由于我的应用程序完全基于多线程,我如何实现我的要求以及这里需要改进的地方!正如我所说,我如何维护/使其在整个应用程序中可用。

最佳答案

使用实现 ServletContextListener 的类在您的 web.xml 中:

<web-app>
<!-- ... -->
<listener>
<listener-class>com.domain.ThreadPoolManager</listener-class>
</listener>
</web-app>

ThreadPoolManager应该重写方法contextInitilized(ServletContextEvent)contextDestroyed(ServletContextEvent) 。方法contextInitilized(ServletContextEvent) Web 应用程序初始化过程开始时被调用。因此,您应该在那里进行初始化工作。同样,方法contextDestroyed(ServletContextEvent)当 servlet 上下文即将关闭时被调用。因此,您应该在那里进行清理工作。

关于java - 服务器启动时初始化同步线程池执行器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13725903/

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