spring线程池配置如下:
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<!-- corePoolSize 同时运行的线程数量 -->
<property name="corePoolSize" value="100" />
<!-- maxPoolSize+queueCapacity 添加的最多线程数量 -->
<property name="maxPoolSize" value="300" />
<property name="queueCapacity" value="300" />
</bean>
解决办法:本解决办法无需引入额外edu.emory.mathcs.backport.java.util.concurrent.Executor的jar包。只需要使用jdk自带的CompletionService包装线程执行器使用即可。
代码如下:
@Resource
private TaskExecutor taskExecutor2;
CompletionService completionService = new ExecutorCompletionService(taskExecutor2);
Future<List<Cont>> future = completionService.submit(new Callable<List<Cont>>(){
public List<Cont> call() throws Exception {
return (List<Cont>) tmpSqlMapClientTemplate.queryForList(
"Cont.getContsByKeys", params);
}});
resultLst.addAll(future.get());