一、在spring配置文件中配置

<!-- 异步线程池 -->  
<bean id="threadPool" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<!-- 核心线程数 -->
<property name="corePoolSize" value="3" />
<!-- 最大线程数 -->
<property name="maxPoolSize" value="20" />
<!-- 队列最大长度 >=mainExecutor.maxSize -->
<property name="queueCapacity" value="1000" />
<!-- 线程池维护线程所允许的空闲时间 -->
<property name="keepAliveSeconds" value="300" />
<!-- 线程池对拒绝任务(无线程可用)的处理策略 -->
<property name="rejectedExecutionHandler">
<bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy" />
</property>
</bean>


二、在service类中注入

@Autowired

private ThreadPoolTaskExecutor threadPool;

三、service方法中使用

public void doSomething(){
threadPool.execute(new Runnable() {

@Override
public void run() {
//异步执行耗时的业务任务
}
});
}


完成



备注:如果要想得到耗时任务的返回结果可以如下使用:

String resp="";
Future<String> task = threadPool.submit(new Callable<String>(){

@Override
public String call() throws Exception {
String callbackResp = HttpUtils.post(Url, params, "utf-8");
return callbackResp;
}
});
try {
//注意task.get()会阻塞,直到返回数据为止,所以一般这样用法很少用
resp=task.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}