如果我的 Java ThreadPoolTask​​Executor 被调用的次数超过 "maxPoolSize" 设置会怎样?

What happens if my Java ThreadPoolTaskExecutor gets called more than the "maxPoolSize" setting?

我将 Java 6 与 Spring 3.2.11.RELEASE 和 JBoss 7.1.3.Final 一起使用。我的 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 的 execute 方法 300 次,当前 10 个线程排队时,其他 290 个线程会发生什么情况?它们会被丢弃还是一次只执行 10 个线程?

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

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

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