9.3. 受管执行器服务
受管执行器服务 (javax.enterprise.concurrent.ManagedExecutorService) 允许 Jakarta EE 应用提交异步执行任务。JBoss EAP 处理托管执行器服务实例,因此 Jakarta EE 应用程序无法调用任何与生命周期相关的方法。
受管 executor 服务并发程序的属性包括:
-
context-service:可选.按名称引用现有上下文服务。如果指定,引用的上下文服务会在向 executor 提交任务时捕获调用上下文,然后在执行任务时使用该调用上下文。 -
JNDI
-name:定义受管线程工厂应放置在 JNDI 中。 -
max-threads:定义执行者使用的最大线程数。如果未定义,则使用来自core-threads的值。 -
thread-factory:按名称引用现有托管线程工厂,以处理内部线程的创建。如果没有指定,则内部将创建和使用具有默认配置的管理线程工厂。 -
core-threads:定义执行者要使用的最少线程数。如果未定义此属性,则根据处理器数量计算默认值。不建议值为0。有关如何使用此值来确定排队策略的详细信息,请参阅queue-length属性。 -
keepalive-time:定义内部线程可以空闲的时间,以毫秒为单位。属性默认值为60000。 -
queue-length:指定 executor 的任务队列容量。值0表示直接移交和可能的拒绝。如果此属性未定义或设置为Integer.MAX_VALUE,这表示应当使用一个未绑定的队列。所有其他值指定准确的队列大小。如果使用未绑定队列或直接移交,则需要大于0的内核线程值。 -
hung-task-threshold:定义时间(以毫秒为单位),之后任务被托管执行器服务视为挂起并且强制中止。如果值为0(默认值),则任务永远不会被视为挂起。 -
长时间运行任务:建议优化长时间运行任务的执行,默认值为false。 -
reject-policy:定义要在 executor 拒绝任务时使用的策略。属性值可以是默认的ABORT,这意味着应抛出异常,或RETRY_ABORT,这意味着执行者会在抛出异常之前尝试再次提交一次异常。
示例:添加新的托管执行器服务
/subsystem=ee/managed-executor-service=newManagedExecutorService:add(jndi-name=java:jboss/ee/concurrency/executor/newManagedExecutorService, core-threads=7, thread-factory=default)
/subsystem=ee/managed-executor-service=newManagedExecutorService:add(jndi-name=java:jboss/ee/concurrency/executor/newManagedExecutorService, core-threads=7, thread-factory=default)
示例:更改受管执行器服务
/subsystem=ee/managed-executor-service=newManagedExecutorService:write-attribute(name=core-threads,value=10)
/subsystem=ee/managed-executor-service=newManagedExecutorService:write-attribute(name=core-threads,value=10)
此操作需要重新加载。同样,您也可以更改其他属性。
示例:删除受管执行器服务
/subsystem=ee/managed-executor-service=newManagedExecutorService:remove()
/subsystem=ee/managed-executor-service=newManagedExecutorService:remove()
此操作需要重新加载。