强制性警告:不鼓励在 Java EE 应用程序服务器(甚至是 Tomcat)中创建自己的线程,因为它可能是一个巨大的性能问题,并且在大多数情况下会阻止容器功能(如 JNDI)正常工作。新线程将不知道它们属于哪个应用程序,线程上下文类加载器将不会被设置以及许多其他隐藏问题。
幸运的是,有一种方法可以让Java EE服务器通过Java EE 6和这种聪明的设计模式来管理线程池。可移植到任何 Java EE 6 认证的服务器。@Asynchronous
在应用程序中创建此 EJB。
package org.superbiz;
import javax.ejb.Asynchronous;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import java.util.concurrent.Callable;
import java.util.concurrent.Executor;
@Stateless(name="Executor")
public class ExecutorBean implements Executor {
@Asynchronous
@Override
public void execute(Runnable command) {
command.run();
}
}
然后,您可以通过普通依赖关系注入在应用程序中的其他位置引用此 Bean(如果引用组件是 Servlet、Listener、Filter、其他 EJB、JSF 托管 Bean)。
@EJB
private Executor executor;
然后像往常一样使用。Executor
如果该组件不是另一个 Java EE 组件,则可以通过以下方式查找 Bean:
InitialContext initialContext = new InitialContext();
Executor executor = (Executor) initialContext.lookup("java:module/Executor");