如何限制ManagedExecutorService除外的线程数

时间:2017-04-01 07:42:31

标签: java multithreading java-ee glassfish-4

类javax.enterprise.concurrent.ManagedExecutorService管理Enterprise Java Bean中的线程。 As threads in EJBs should not be started in the classical Java SE way, I use the ManagedExecutorService to handle threads.

“强制警告:不鼓励在Java EE应用服务器(甚至Tomcat)中创建自己的线程,因为它可能是一个巨大的性能问题,并且在大多数情况下会阻止容器功能(如JNDI)工作。新线程将不知道它们属于哪个应用程序,不会设置Thread上下文类加载器以及许多其他隐藏的问题。“

在Java SE中,您可以定义最大线程数,如以下代码所示。

java.util.concurrent.Executors.newFixedThreadPool(numberOfThreadsInThePool);

您知道如何限制ManagedExecutorService所使用的线程数吗?

2 个答案:

答案 0 :(得分:0)

当您使用EE容器时,您应该通过配置容器来解决有关线程数的问题。对于Glassfish,请查看有关线程池管理和性能调整的Oracle文档。

答案 1 :(得分:0)

在Glassfish Application Server中创建ManagedExcecutorService时,可以确定最大线程池大小。根据这篇文章https://blogs.oracle.com/arungupta/entry/create_managedexecutorservice_managedscheduledexecutorservice_managedthreadfactory_contextservice,glassfish的asadmin命令有一个参数“maximumpoolsize”,它定义了ManagedExcecutorService使用的最大线程数。

asadmin create-managed-executor-service concurrent/myExecutor --maximumpoolsize=20