首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ManagedThreadFactory不会立即启动线程

ManagedThreadFactory不会立即启动线程
EN

Stack Overflow用户
提问于 2017-04-03 21:17:26
回答 1查看 159关注 0票数 0

我正在尝试将一个遗留应用程序迁移到jee 7。作为部署的一部分,我们在启动服务器上加载了一些初始化的缓存。反过来,这些缓存被其他类使用。

遗留实现按顺序对它们进行初始化。我正在尝试并行初始化它们,以节省部署时间。

我正在使用ManagedThreadFactory.newThread(callable).start();

问题是,线程在部署之后或部署结束时开始初始化。这会导致其他类中的NPE依赖于缓存。

有没有什么方法可以并行初始化缓存,一旦缓存初始化完成,其余的部署就应该继续进行。

EN

回答 1

Stack Overflow用户

发布于 2017-04-04 03:02:47

我建议使用ServletContextListener进行更改。您可以在那里启动线程,但不同之处在于,您将等待它们在contextInitialized方法中返回。这样,直到servlet上下文初始化完成后,servlet才会启动。老实说,这比启动servlet更好,并且在JEE7之前就能很好地工作。

代码应该类似于:

代码语言:javascript
复制
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class YourContextListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        // create the caches - you can still thread them for faster startup
        // but don't return until they are all initialized
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        // tear down the caches?
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43185704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档