spring ThreadPoolTask​​Executorto在每个方法调用上创建新线程

时间:2018-04-03 13:04:05

标签: java spring multithreading

我有ThreadPoolTask​​Executor的以下配置

 <bean id="threadPoolTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
    <property name="corePoolSize" value="10" />
    <property name="maxPoolSize" value="25" />
    <property name="queueCapacity" value="30" />
</bean>

我的公共类AdminService中有2个方法。

  1. void triggerJob();
  2. boolean executeSql(String sql);
  3. 如何将ThreadPoolTask​​Executor插入triggerJob方法,以便在第一个方法中调用executeSql时创建新线程。

    在inside triggerjob中,我有基于条件调用executeSql的循环。

    我是否需要创建一个实现runnable的私有类,以便ThreadPoolTask​​Executor可以执行此类,还是可以创建没有runnable的线程?

    我的想法是这样的

    @Autowired    
    ThreadPoolTaskExecutor threadPoolTaskExecutor;
    
         void triggerJob(){
               for( Object k:Objects){
                   if(k.equals(something){
                    //here new thread to be created somehow 
                    threadPoolTaskExecutor.execute(executeSql(k.getSql())
                   }
               }
            }
    

1 个答案:

答案 0 :(得分:1)

如果必须这样做,可以使用org.springframework.core.task.SimpleAsyncTaskExecutor

<bean id="simpleTaskExecutor" class="org.springframework.core.task.SimpleAsyncTaskExecutor">
   <property name="concurrencyLimit" value="25" />
</bean>

但是创建Java线程很昂贵。通常建议重用线程,甚至SimpleAsyncTaskExecutor docs说:

  

注意:此实现不会重用线程!请考虑使用线程池TaskExecutor实现,尤其是执行大量短期任务。