真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SpringBoot配置和使用多線程池的實(shí)現(xiàn)

某些情況下,我們需要在項(xiàng)目中對(duì)多種任務(wù)分配不同的線程池進(jìn)行執(zhí)行。從而通過(guò)監(jiān)控不同的線程池來(lái)控制不同的任務(wù)。為了達(dá)到這個(gè)目的,需要在項(xiàng)目中配置多線程池。

成都創(chuàng)新互聯(lián)公司提供高防主機(jī)、云服務(wù)器、香港服務(wù)器、綿陽(yáng)服務(wù)器托管

spring boot 提供了簡(jiǎn)單高效的線程池配置和使用方案。

配置

首先是配置線程池的bean交給spring 管理:

@Configuration

public class TaskExecutePool {

 @Bean(name ="threadPoolA")

public ThreadPoolTaskExecutormyTaskAsyncPool() {

ThreadPoolTaskExecutor executor =new ThreadPoolTaskExecutor();
  executor.setCorePoolSize(4);

  executor.setMaxPoolSize(8);

  executor.setQueueCapacity(100);

  executor.setKeepAliveSeconds(60);

  executor.setThreadNamePrefix("Pool-A");

  executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());

  executor.initialize();

  return executor;

 }

@Bean(name ="ThreadPoolB")

public ThreadPoolTaskExecutorAsyncPoolB() {

ThreadPoolTaskExecutor executor =new ThreadPoolTaskExecutor();

  executor.setCorePoolSize(2);

  executor.setMaxPoolSize(4);

  executor.setQueueCapacity(8);

  executor.setKeepAliveSeconds(60);

  executor.setThreadNamePrefix("Pool-B");
  //當(dāng)任務(wù)數(shù)量超過(guò)MaxPoolSize和QueueCapacity時(shí)使用的策略,該策略是又調(diào)用任務(wù)的線程執(zhí)行
  executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());

  executor.initialize();

  return executor;

 }

}

使用

使用線程只需要在執(zhí)行方法上加上注釋,同時(shí)該方法的類必須被定義為bean,交由spring管理。

可以在類上使用注解@Component、@Service等

@Async(value="ThreadPoolA")
public void taskA(){
 ...
}

查看線程活躍數(shù):

@Autowired
 private ThreadPoolTaskExecutor threadPoolA;//變量名稱為定義的線程池bean定義的name屬性名。

public void checkAvtiveThreadNum() {
  int num = threadPoolA.getActiveCount();
}

當(dāng)然還有其他一些方法,這里不再舉例。

線程池各屬性理解:

corePoolSize:表示線程池核心線程,正常情況下開(kāi)啟的線程數(shù)量。

queueCapacity:當(dāng)核心線程都在跑任務(wù),還有多余的任務(wù)會(huì)存到此處。

maxPoolSize:如果queueCapacity存滿了,還有任務(wù)就會(huì)啟動(dòng)更多的線程,直到線程數(shù)達(dá)到maxPoolSize。如果還有任務(wù),則根據(jù)拒絕策略進(jìn)行處理。

拒絕策略有多種:

  1. 由任務(wù)調(diào)用線程執(zhí)行
  2. 拋異常
  3. 多余的直接拋棄
  4. 根據(jù)FIFO(先進(jìn)先出)拋棄隊(duì)列里任務(wù)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。


當(dāng)前名稱:SpringBoot配置和使用多線程池的實(shí)現(xiàn)
文章位置:http://weahome.cn/article/jpdsoh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部