亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring線程池ThreadPoolTaskExecutor配置詳情

發布時間:2020-10-10 17:34:52 來源:腳本之家 閱讀:188 作者:低調的小黑 欄目:編程語言

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

1. ThreadPoolTaskExecutor配置

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

屬性字段說明

corePoolSize:線程池維護線程的最少數量

keepAliveSeconds:允許的空閑時間

maxPoolSize:線程池維護線程的最大數量

queueCapacity:緩存隊列

rejectedExecutionHandler:對拒絕task的處理策略

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

如果此時線程池中的數量小于corePoolSize,即使線程池中的線程都處于空閑狀態,也要創建新的線程來處理被添加的任務。

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

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

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

當線程池中的線程數量大于corePoolSize時,如果某線程空閑時間超過keepAliveTime,線程將被終止。這樣,線程池可以動態的調整池中的線程數。

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

/**
 * 多線程并發處理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);
 
 /**
  * 默認處理流程耗時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 {
 }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

河曲县| 平塘县| 讷河市| 马尔康县| 双流县| 孝昌县| 宣城市| 临潭县| 成武县| 江孜县| 繁昌县| 建始县| 申扎县| 阜平县| 涡阳县| 钟祥市| 钟山县| 昌宁县| 江津市| 甘肃省| 公主岭市| 新余市| 建阳市| 定结县| 麻城市| 太湖县| 开原市| 津南区| 古丈县| 大宁县| 金昌市| 深圳市| 黑龙江省| 仁布县| 伊春市| 衡山县| 屏东市| 抚远县| 武穴市| 华坪县| 伊吾县|