如果我的Java ThreadPoolTask​​Executor被调用超过" maxPoolSize"会发生什么?设置?

时间:2016-09-28 13:46:18

标签: java spring multithreading threadpool managedthreadfactory

我正在使用带有Spring 3.2.11.RELEASE和JBoss 7.1.3.Final的Java 6。我在我的Spring应用程序上下文文件中有这个

<!--  Manages thirdparty threads -->
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
    <property name="threadFactory" ref="thirdpartyThreadFactory"/>
        <property name="maxPoolSize" value=“10” />
        <property name="corePoolSize" value=“5” />
</bean>
<bean id="thirdpartyThreadFactory" class="org.springframework.scheduling.concurrent.CustomizableThreadFactory">
        <constructor-arg value="thirdparty-"/>
</bean>

我的问题是,如果我在给定上述设置的情况下调用taskExecutor的执行方法300次,那么当前10个线程排队时,其他290个线程会发生什么?它们会被丢弃还是只是一次执行10个线程?

2 个答案:

答案 0 :(得分:0)

maxPoolSize定义并发运行线程的最大数量。因此,如果您提交的任务数量多于该数字,则它们将根据队列设置排队(例如,您可以通过调用setQueueCapacity()来限制队列大小)。

答案 1 :(得分:0)

maxPoolSize仅定义可以同时运行的线程数。因此,它是对代码生成的线程数量的限制。其余的任务不会被删除,而是在队列中,并在线程释放后立即执行。

例如。如果你有maxPoolSize为1,那么所有任务将按顺序执行。 在你的情况下,一批10个,取决于每个任务所花费的时间。

相关问题