亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring線程池ThreadPoolTaskExecutor配置詳情

 更新時(shí)間:2018年03月01日 16:00:11   作者:低調(diào)的小黑  
本篇文章主要介紹了Spring線程池ThreadPoolTaskExecutor配置詳情,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

本文介紹了Spring線程池ThreadPoolTaskExecutor配置,分享給大家,具體如下:

1. ThreadPoolTaskExecutor配置

<!-- spring thread pool executor -->   
 <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
  <!-- 線程池維護(hù)線程的最少數(shù)量 -->
  <property name="corePoolSize" value="5" />
  <!-- 允許的空閑時(shí)間 -->
  <property name="keepAliveSeconds" value="200" />
  <!-- 線程池維護(hù)線程的最大數(shù)量 -->
  <property name="maxPoolSize" value="10" />
  <!-- 緩存隊(duì)列 -->
  <property name="queueCapacity" value="20" />
  <!-- 對(duì)拒絕task的處理策略 -->
  <property name="rejectedExecutionHandler">
   <bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy" />
  </property>
 </bean>

屬性字段說明

corePoolSize:線程池維護(hù)線程的最少數(shù)量

keepAliveSeconds:允許的空閑時(shí)間

maxPoolSize:線程池維護(hù)線程的最大數(shù)量

queueCapacity:緩存隊(duì)列

rejectedExecutionHandler:對(duì)拒絕task的處理策略

2. execute(Runable)方法執(zhí)行過程

如果此時(shí)線程池中的數(shù)量小于corePoolSize,即使線程池中的線程都處于空閑狀態(tài),也要?jiǎng)?chuàng)建新的線程來處理被添加的任務(wù)。

如果此時(shí)線程池中的數(shù)量等于 corePoolSize,但是緩沖隊(duì)列 workQueue未滿,那么任務(wù)被放入緩沖隊(duì)列。

如果此時(shí)線程池中的數(shù)量大于corePoolSize,緩沖隊(duì)列workQueue滿,并且線程池中的數(shù)量小于maxPoolSize,建新的線程來處理被添加的任務(wù)。

如果此時(shí)線程池中的數(shù)量大于corePoolSize,緩沖隊(duì)列workQueue滿,并且線程池中的數(shù)量等于maxPoolSize,那么通過handler所指定的策略來處理此任務(wù)。也就是:處理任務(wù)的優(yōu)先級(jí)為:核心線程corePoolSize、任務(wù)隊(duì)列workQueue、最大線程 maximumPoolSize,如果三者都滿了,使用handler處理被拒絕的任務(wù)。

當(dāng)線程池中的線程數(shù)量大于corePoolSize時(shí),如果某線程空閑時(shí)間超過keepAliveTime,線程將被終止。這樣,線程池可以動(dòng)態(tài)的調(diào)整池中的線程數(shù)。

3. 示例代碼

Junit Test

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { MultiThreadConfig.class })
public class MultiThreadTest {

 @Autowired
 private ThreadPoolTaskExecutor taskExecutor;

 @Autowired
 private MultiThreadProcessService multiThreadProcessService;
 
 @Test
 public void test() {
  int n = 20;
  for (int i = 0; i < n; i++) {
   taskExecutor.execute(new MultiThreadDemo(multiThreadProcessService));
   System.out.println("int i is " + i + ", now threadpool active threads totalnum is " + taskExecutor.getActiveCount());
  }
  
  try {
   System.in.read();
  } catch (IOException e) {
   throw new RuntimeException(e);
  }
 }
}

MultiThreadDemo

/**
 * 多線程并發(fā)處理demo
 * @author daniel.zhao
 *
 */
public class MultiThreadDemo implements Runnable {
 private MultiThreadProcessService multiThreadProcessService; 
 public MultiThreadDemo() {
 }
 
 public MultiThreadDemo(MultiThreadProcessService multiThreadProcessService) {
  this.multiThreadProcessService = multiThreadProcessService;
 }
 
 @Override
 public void run() {
  multiThreadProcessService.processSomething();
 }
}

MultiThreadProcessService

@Service
public class MultiThreadProcessService {
 public static final Logger logger = Logger.getLogger(MultiThreadProcessService.class);
 
 /**
  * 默認(rèn)處理流程耗時(shí)1000ms
  */
 public void processSomething() {
  logger.debug("MultiThreadProcessService-processSomething" + Thread.currentThread() + "......start");
  try {
   Thread.sleep(1000);
  } catch (InterruptedException e) {
   throw new RuntimeException(e);
  }
  logger.debug("MultiThreadProcessService-processSomething" + Thread.currentThread() + "......end");
 }
}

MultiThreadConfig

 @Configuration
 @ComponentScan(basePackages = { "com.xxx.multithread" })
 @ImportResource(value = { "classpath:config/application-task.xml" })
 @EnableScheduling
 public class MultiThreadConfig {
 }

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論