0

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 の execute メソッドを 300 回呼び出すと、最初の 10 個のスレッドがキューに入れられると、他の 290 個のスレッドはどうなるでしょうか? それらはドロップされますか、それとも一度に 10 個のスレッドが実行されるだけですか?

4

2 に答える 2

0

maxPoolSize、同時実行スレッドの最大数を定義します。したがって、その数よりも多くのタスクを送信すると、キューの設定に応じてキューに入れられます (たとえば、 を呼び出してキューのサイズを制限できますsetQueueCapacity())。

于 2016-09-28T13:52:33.623 に答える
0

maxPoolSize は、同時に実行できるスレッドの数のみを定義します。したがって、コードが生成するスレッド数の制限です。残りのタスクは削除されませんが、キューに入れられ、スレッドが解放されるとすぐに実行されます。

たとえば。maxPoolSize を 1 にすると、すべてのタスクが順番に実行されます。あなたの場合、各タスクにかかる時間に応じて10のバッチで。

于 2016-09-28T14:07:01.480 に答える