Если вы имеете в виду задачи, как в запланированных задачах, то я не верю в это, по крайней мере, не напрямую, поскольку выполнение задачи обычно выполняется синхронно, то есть два вызова одной и той же задачи выполняются в одном потоке - это по крайней мере верно для класса JDK Timer
, который использует выделенный поток для каждого таймера, поэтому несколько срабатываний таймера выполняются в одном потоке.
Если вы хотите, чтобы задачи выполнялись в пуле потоков, лучше всего отделить задачу от таймера, а таймер должен вызвать вашу задачу в пуле потоков. Вы можете настроить пул потоков, выполняющий задачу, и таким образом получить полный контроль над количеством потоков.
Задание, вызванное таймером, выглядит следующим образом
public class TimerTaskInvoker extends TimerTask
{
TaskExecutor executor;
Runnable taskToRun;
public void run() {
executor.execute(taskRoRun);
}
}
В вашем весеннем конфиге
<!-- the thread pool for executing tasks -->
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="5" />
<property name="maxPoolSize" value="10" />
<property name="queueCapacity" value="25" />
</bean>
<!-- invokes your actual task from the timer -->
<bean id="yourTaskInvoker" class="TimerTaskInvoker">
<property name="executor" value="taskExecutor"/>
<property name="taskToRun">
<bean class="YourTaskClass">
<!-- your task properties etc... -->
</bean>
</property>
</bean>
<!-- schedules execution of yourTaskInvoker -->
<bean id="scheduledTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
<!-- wait 10 seconds before starting repeated execution -->
<property name="delay" value="10000" />
<!-- run every 50 seconds -->
<property name="period" value="50000" />
<property name="timerTask" ref="yourTaskInvoker" />
</bean>