bean 配置
applicationContext.xml
<bean id="threadPoolTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<!-- 核心線程數,默認爲1 -->
<property name="corePoolSize" value="10" />
<!-- 最大線程數,默認爲Integer.MAX_VALUE -->
<property name="maxPoolSize" value="50" />
<!-- 隊列最大長度,一般需要設置值>=notifyScheduledMainExecutor.maxNum;默認爲Integer.MAX_VALUE
<property name="queueCapacity" value="1000" /> -->
<!-- 線程池維護線程所允許的空閒時間,默認爲60s -->
<property name="keepAliveSeconds" value="300" />
<!-- 線程池對拒絕任務(無線程可用)的處理策略,目前只支持AbortPolicy、CallerRunsPolicy;默認爲後者 -->
<property name="rejectedExecutionHandler">
<!-- AbortPolicy:直接拋出java.util.concurrent.RejectedExecutionException異常 -->
<!-- CallerRunsPolicy:主線程直接執行該任務,執行完之後嘗試添加下一個任務到線程池中,可以有效降低向線程池內添加任務的速度 -->
<!-- DiscardOldestPolicy:拋棄舊的任務、暫不支持;會導致被丟棄的任務無法再次被執行 -->
<!-- DiscardPolicy:拋棄當前任務、暫不支持;會導致被丟棄的任務無法再次被執行 -->
<bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy" />
</property>
</bean>
maven配置jar包
pom.xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
如何調用:
@Autowired
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
public void method(){
threadPoolTaskExecutor.execute(new Runnable() {
@Override
public void run() {
//具體實現
}
});
}