我刚才听说在JavaEE容器中生成自己的线程是一种不好的做法。几个月前我开始学习JavaEE 6开发以来,我已经做了一段时间了。我一直在做的是:
1.)从Web应用程序主入口点(实现ServletContextListener的对象),
2.)我创建了一对线程来为contextInitialized方法中的Web应用程序后端运行一些异步后台任务。
3.)我在contextDestroyed方法中清理资源。
有没有更好的方法呢?如何在不生成线程的情况下创建异步后台任务?不使用线程的原因是什么?
我正在使用EJB 3.0和JavaEE6
答案 0 :(得分:4)
手动生成线程确实是一种不好的做法,因为您希望Java容器在应用程序代码外部为您管理线程池。 JavaEE 6有一个名为@Asynchronous的注释,专门用于此目的,Oracle有一个official tutorial。
答案 1 :(得分:2)
在EJB3.1之前,解决方法是创建JMS和MDB以在EJB容器中执行异步作业,这相对较重,并且依赖于消息代理。 @Asynchronous提供了一种更简单的方法来处理异步作业。
答案 2 :(得分:0)
在Java EE 7中,我们看一下新的Concurrency Utils API规范。