原文地址:http://blog.csdn.net/luwei42768/article/details/54927246
一、在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>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
二、在service類中注入
@Autowired
private ThreadPoolTaskExecutor threadPool;
三、service方法中使用
public void doSomething(){
threadPool.execute(new Runnable() {
@Override
public void run() {
//異步執行耗時的業務任務
}
});
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
完成
備註:如果要想得到耗時任務的返回結果可以如下使用:
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();
}