Spring中的線程池ThreadPoolTaskExecutor

一、直接調用Spring框架中的ThreadPoolTaskExecutor java

ThreadPoolTaskExecutor poolTaskExecutor = new ThreadPoolTaskExecutor();
//線程池所使用的緩衝隊列
poolTaskExecutor.setQueueCapacity(200);
//線程池維護線程的最少數量
poolTaskExecutor.setCorePoolSize(5);
//線程池維護線程的最大數量
poolTaskExecutor.setMaxPoolSize(1000);
//線程池維護線程所容許的空閒時間
poolTaskExecutor.setKeepAliveSeconds(30000);
poolTaskExecutor.initialize();


二、在spring.xml中配置spring

<!-- 配置線程池 -->
<bean id ="taskExecutor"  class ="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor" >
	<!-- 線程池維護線程的最少數量 -->
<span style="white-space:pre">	</span><property name ="corePoolSize" value ="5" />
	<!-- 線程池維護線程所容許的空閒時間 -->
<span style="white-space:pre">	</span><property name ="keepAliveSeconds" value ="30000" />
	<!-- 線程池維護線程的最大數量 -->
<span style="white-space:pre">	</span><property name ="maxPoolSize" value ="1000" />
	<!-- 線程池所使用的緩衝隊列 -->
<span style="white-space:pre">	</span><property name ="queueCapacity" value ="200" />
</bean>

程序裏面獲取:
app

ApplicationContext ctx =  new ClassPathXmlApplicationContext("applicationContext.xml");
ThreadPoolTaskExecutor poolTaskExecutor = (ThreadPoolTaskExecutor)ctx.getBean("taskExecutor");

利用線程池啓動線程:
框架

poolTaskExecutor.execute(new XXXThread());


三、配置解釋spa

當一個任務經過execute(Runnable)方法欲添加到線程池時:線程

一、 若是此時線程池中的數量小於corePoolSize,即便線程池中的線程都處於空閒狀態,也要建立新的線程來處理被添加的任務。code

二、 若是此時線程池中的數量等於 corePoolSize,可是緩衝隊列 workQueue未滿,那麼任務被放入緩衝隊列。xml

三、若是此時線程池中的數量大於corePoolSize,緩衝隊列workQueue滿,而且線程池中的數量小於maximumPoolSize,建新的線程來處理被添加的任務。隊列

四、 若是此時線程池中的數量大於corePoolSize,緩衝隊列workQueue滿,而且線程池中的數量等於maximumPoolSize,那麼經過 handler所指定的策略來處理此任務。也就是:處理任務的優先級爲:核心線程corePoolSize、任務隊列workQueue、最大線程 maximumPoolSize,若是三者都滿了,使用handler處理被拒絕的任務。ci

五、 當線程池中的線程數量大於 corePoolSize時,若是某線程空閒時間超過keepAliveTime,線程將被終止。這樣,線程池能夠動態的調整池中的線程數。

相關文章
相關標籤/搜索