我正在使用带有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个线程?
答案 0 :(得分:0)
maxPoolSize
定义并发运行线程的最大数量。因此,如果您提交的任务数量多于该数字,则它们将根据队列设置排队(例如,您可以通过调用setQueueCapacity()
来限制队列大小)。
答案 1 :(得分:0)
maxPoolSize仅定义可以同时运行的线程数。因此,它是对代码生成的线程数量的限制。其余的任务不会被删除,而是在队列中,并在线程释放后立即执行。
例如。如果你有maxPoolSize为1,那么所有任务将按顺序执行。 在你的情况下,一批10个,取决于每个任务所花费的时间。