2

我刚刚听说在 JavaEE 容器中生成自己的线程是一种不好的做法。自从几个月前开始学习 JavaEE 6 开发以来,我一直在这样做。我一直在做的是:

1.)从 Web 应用程序主入口点(实现 ServletContextListener 的对象),

2.)我创建了几个线程来在 contextInitialized 方法中为 Web 应用程序后端运行一些异步后台任务。

3.)我在 contextDestroyed 方法中清理资源。

有没有更好的方法来做到这一点?如何在不产生线程的情况下创建异步后台任务?不使用线程的原因是什么?

我正在使用 EJB 3.0 和 JavaEE6

4

3 回答 3

4

手动生成线程确实是一种不好的做法,因为您希望 Java 容器在应用程序代码之外为您管理线程池。JavaEE 6 专门为此目的有一个名为 @Asynchronous 的注解,Oracle 有一个官方教程

于 2012-05-23T03:21:22.070 回答
2

在 EJB3.1 之前,解决方法是创建 JMS 和 MDB 在 EJB 容器中执行异步作业,比较繁重,并且依赖于消息代理。@Asynchronous 提供了一种更简单的方法来处理异步作业。

于 2012-06-06T22:10:56.213 回答
0

在 Java EE 7 中查看新的 Concurrency Utils API 规范。

于 2014-01-02T10:05:08.060 回答