偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Spring Boot 如何解決多個(gè)定時(shí)任務(wù)阻塞問題?

開發(fā) 架構(gòu)
最近長(zhǎng)文擼多了,有點(diǎn)累,今天來點(diǎn)簡(jiǎn)單的。今天這篇文章介紹一下Spring Boot 中 如何開啟多線程定時(shí)任務(wù)?

最近長(zhǎng)文擼多了,有點(diǎn)累,今天來點(diǎn)簡(jiǎn)單的。

今天這篇文章介紹一下Spring Boot 中 如何開啟多線程定時(shí)任務(wù)?

為什么Spring Boot 定時(shí)任務(wù)是單線程的?

想要解釋為什么,一定要從源碼入手,直接從@EnableScheduling這個(gè)注解入手,找到了這個(gè)ScheduledTaskRegistrar類,其中有一段代碼如下:

  1. protected void scheduleTasks() { 
  2.   if (this.taskScheduler == null) { 
  3.    this.localExecutor = Executors.newSingleThreadScheduledExecutor(); 
  4.    this.taskScheduler = new ConcurrentTaskScheduler(this.localExecutor); 
  5.   } 

如果taskScheduler為null,則創(chuàng)建單線程的線程池:Executors.newSingleThreadScheduledExecutor()。

多線程定時(shí)任務(wù)如何配置?

下面介紹三種方案配置多線程下的定時(shí)任務(wù)。

1、重寫SchedulingConfigurer#configureTasks()

直接實(shí)現(xiàn)SchedulingConfigurer這個(gè)接口,設(shè)置taskScheduler,代碼如下:

  1. @Configuration 
  2. public class ScheduleConfig implements SchedulingConfigurer { 
  3.     @Override 
  4.     public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { 
  5.         //設(shè)定一個(gè)長(zhǎng)度10的定時(shí)任務(wù)線程池 
  6.         taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10)); 
  7.     } 

2、通過配置開啟

Spring Boot quartz 已經(jīng)提供了一個(gè)配置用來配置線程池的大小,如下;

  1. spring.task.scheduling.pool.size=10 

只需要在配置文件中添加如上的配置即可生效!

3、結(jié)合@Async

@Async這個(gè)注解都用過,用來開啟異步任務(wù)的,使用@Async這個(gè)注解之前一定是要先配置線程池的,配置如下:

  1. @Bean 
  2.   public ThreadPoolTaskExecutor taskExecutor() { 
  3.       ThreadPoolTaskExecutor poolTaskExecutor = new ThreadPoolTaskExecutor(); 
  4.       poolTaskExecutor.setCorePoolSize(4); 
  5.       poolTaskExecutor.setMaxPoolSize(6); 
  6.       // 設(shè)置線程活躍時(shí)間(秒) 
  7.       poolTaskExecutor.setKeepAliveSeconds(120); 
  8.       // 設(shè)置隊(duì)列容量 
  9.       poolTaskExecutor.setQueueCapacity(40); 
  10.       poolTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); 
  11.       // 等待所有任務(wù)結(jié)束后再關(guān)閉線程池 
  12.       poolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true); 
  13.       return poolTaskExecutor; 
  14.   } 

然后在@Scheduled方法上標(biāo)注@Async這個(gè)注解即可實(shí)現(xiàn)多線程定時(shí)任務(wù),代碼如下:

  1. @Async 
  2.    @Scheduled(cron = "0/2 * * * * ? "
  3.    public void test2() { 
  4.        System.out.println("..................執(zhí)行test2................."); 
  5.    } 

總結(jié)

 

本篇文章介紹了Spring Boot 中 實(shí)現(xiàn)多線程定時(shí)任務(wù)的三種方案,你喜歡哪一種?

 

責(zé)任編輯:武曉燕 來源: 碼猿技術(shù)專欄
相關(guān)推薦

2024-10-15 16:41:35

2012-02-07 13:31:14

SpringJava

2025-01-08 09:55:37

Spring接口數(shù)據(jù)庫(kù)

2023-08-08 08:35:28

web框架Hosting模塊

2022-03-23 11:45:39

Quartz數(shù)據(jù)庫(kù)節(jié)點(diǎn)

2024-11-04 16:01:01

2024-10-10 10:32:04

2019-11-26 14:30:20

Spring循環(huán)依賴Java

2012-09-05 11:09:15

SELinux操作系統(tǒng)

2018-08-20 07:04:35

2021-09-26 09:17:01

Python命令定時(shí)任務(wù)

2025-02-24 16:00:00

SpringBoot定時(shí)任務(wù)開發(fā)

2009-10-28 10:05:29

Ubuntucrontab定時(shí)任務(wù)

2010-03-10 15:47:58

crontab定時(shí)任務(wù)

2023-11-07 07:47:35

Topic線程PUSH

2010-04-29 17:46:31

Oracle死鎖

2019-02-25 15:44:16

開源RabbitMQSpring Clou

2022-03-28 08:31:29

線程池定時(shí)任務(wù)

2024-02-28 09:54:07

線程池配置

2017-03-13 09:12:00

TCP數(shù)據(jù)結(jié)構(gòu)請(qǐng)求包
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)