0

我将 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 的执行方法 300 次,那么当前 10 个线程排队时,其他 290 个线程会发生什么情况?它们会被丢弃还是只是一次执行 10 个线程?

4

2 回答 2

0

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

例如。如果您将 maxPoolSize 设置为 1,那么所有任务都将按顺序执行。在您的情况下,根据每项任务所花费的时间,批量为 10 个。

于 2016-09-28T14:07:01.480 回答
0

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

于 2016-09-28T13:52:33.623 回答