Java 配置Wildfly ManagedExecutorService行为
Wildfly ManagedExecutorService的行为非常不直观,我怀疑它的行为是一个bug(Wildfly 9,不管它值多少):它产生Java 配置Wildfly ManagedExecutorService行为,java,jakarta-ee,concurrency,wildfly,Java,Jakarta Ee,Concurrency,Wildfly,Wildfly ManagedExecutorService的行为非常不直观,我怀疑它的行为是一个bug(Wildfly 9,不管它值多少):它产生核心大小线程,然后用它来处理队列大小'd队列。即使设置了max size,也不会产生额外的线程,无论队列中有多少工作 也就是说,直到队列完全满,此时最多会生成max size线程,但由于此时队列已满,新生成的线程通常无法在作业因队列超时而丢失之前完成 相反,正常的执行器服务倾向于生成max(max size,available work)线程,在其他
核心大小
线程,然后用它来处理队列大小
'd队列。即使设置了max size
,也不会产生额外的线程,无论队列中有多少工作
也就是说,直到队列完全满,此时最多会生成max size
线程,但由于此时队列已满,新生成的线程通常无法在作业因队列超时而丢失之前完成
相反,正常的执行器服务倾向于生成max(max size,available work)
线程,在其他工作中,如果没有达到max size,如果有额外的可用工作,它们会生成额外的线程
但是我无法配置
托管执行器服务
子系统来提供这样的行为(同时仍然有作业队列)。唯一的选择似乎是将核心大小设置为最大大小,这是愚蠢的。有什么提示吗?这可能与ThreadPoolExecutor
的工作方式有关:如果corePoolSize或更多线程正在运行,则执行者总是喜欢将请求排队,而不是添加新线程。如果请求无法排队,则会创建一个新线程,除非该线程将超过maximumPoolSize,在这种情况下,任务将被拒绝。是的,我正试图改变这种行为。如果是纯Java,我可以很容易地将ThreadPoolExecutor子类化以获得我想要的行为,但我猜这在本例中是不可能的。