欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot 整合線程池的示例詳解

 更新時(shí)間:2024年08月14日 16:10:48   作者:救苦救難韓天尊  
線程池是一種利用池化技術(shù)思想來實(shí)現(xiàn)的線程管理技術(shù),主要是為了復(fù)用線程、便利地管理線程和任務(wù)、并將線程的創(chuàng)建和任務(wù)的執(zhí)行解耦開來,這篇文章主要介紹了SpringBoot 整合線程池的示例詳解,需要的朋友可以參考下

線程池簡(jiǎn)介

什么是線程池

線程池是一種利用池化技術(shù)思想來實(shí)現(xiàn)的線程管理技術(shù),主要是為了復(fù)用線程、便利地管理線程和任務(wù)、并將線程的創(chuàng)建和任務(wù)的執(zhí)行解耦開來。我們可以創(chuàng)建線程池來復(fù)用已經(jīng)創(chuàng)建的線程來降低頻繁創(chuàng)建和銷毀線程所帶來的資源消耗。在JAVA中主要是使用ThreadPoolExecutor類來創(chuàng)建線程池,并且JDK中也提供了Executors工廠類來創(chuàng)建線程池(不推薦使用)。

線程池的優(yōu)點(diǎn)

  • 降低資源消耗,復(fù)用已創(chuàng)建的線程來降低創(chuàng)建和銷毀線程的消耗。
  • 提高響應(yīng)速度,任務(wù)到達(dá)時(shí),可以不需要等待線程的創(chuàng)建立即執(zhí)行。
  • 提高線程的可管理性,使用線程池能夠統(tǒng)一的分配、調(diào)優(yōu)和監(jiān)控。

1.啟動(dòng)類加 @EnableAsync 注解

@SpringBootApplication
@EnableAsync
public class FacadeH5Application {
    public static void main(String[] args) {
        SpringApplication.run(FacadeH5Application.class, args);
    }
}

2.在方法上加 @Async 注解

@Async
public void m1() {
    //do something
}

注意:導(dǎo)致 @Async 注解失效的幾個(gè)原因

  • 兩個(gè)方法都在同一個(gè)類里面,一個(gè)方法調(diào)用另一個(gè)異步方法,不生效。但是如果在本類中注入自己的實(shí)例,再通過自己的實(shí)例調(diào)用異步方法就可行。
  • @Async 方法所在的類沒有交給 spring 代理(沒加諸如@Component注解),不生效。
  • 注解的方法不是是public方法,不生效。

3.創(chuàng)建線程池配置類

默認(rèn)的線程池配置如下

# 核心線程數(shù)
spring.task.execution.pool.core-size=8  
# 最大線程數(shù)
spring.task.execution.pool.max-size=16
# 空閑線程存活時(shí)間
spring.task.execution.pool.keep-alive=60s
# 是否允許核心線程超時(shí)
spring.task.execution.pool.allow-core-thread-timeout=true
# 線程隊(duì)列數(shù)量
spring.task.execution.pool.queue-capacity=100
# 線程關(guān)閉等待
spring.task.execution.shutdown.await-termination=false
spring.task.execution.shutdown.await-termination-period=
# 線程名稱前綴
spring.task.execution.thread-name-prefix=task-

創(chuàng)建線程池配置類

@Configuration
public class ThreadPoolConfig {
    @Bean
    public TaskExecutor taskExecutor(){
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        //設(shè)置核心線程數(shù)
        executor.setCorePoolSize(10);
        //設(shè)置最大線程數(shù)
        executor.setMaxPoolSize(20);
        //設(shè)置隊(duì)列容量
        executor.setQueueCapacity(20);
        //設(shè)置線程活躍時(shí)間
        executor.setKeepAliveSeconds(30);
        //設(shè)置線程名稱前綴
        executor.setThreadNamePrefix("sendSms-");
        //設(shè)置拒絕策略
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        //等待所有任務(wù)結(jié)束后再關(guān)閉線程池
        executor.setWaitForTasksToCompleteOnShutdown(true);
        //設(shè)置線程池中任務(wù)的等待時(shí)間
        executor.setAwaitTerminationSeconds(60);
        return executor;
    }
}

配置多個(gè)線程池

有時(shí)候,一個(gè)項(xiàng)目中如果配置了多個(gè)線程池,那需要在 @Bean后面加上線程池的名稱

@Configuration
public class ThreadPoolConfig {
    @Bean("ThreadPool1")
    public TaskExecutor taskExecutor(){
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
		......
        return executor;
    }
    @Bean("ThreadPool2")
    public TaskExecutor taskExecutor(){
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
		......
        return executor;
    }
}

在使用 @Async注解時(shí)就需要指明具體使用的線程池,如下格式

@Async("ThreadPool1")
public void m1() {
    //do something
}

到此這篇關(guān)于SpringBoot 整合線程池的文章就介紹到這了,更多相關(guān)SpringBoot 整合線程池內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談一下SpringBoot中的異步任務(wù)

    淺談一下SpringBoot中的異步任務(wù)

    這篇文章主要介紹了淺談一下SpringBoot中的異步任務(wù),SpringBoot 中的異步任務(wù)主要是指在 SpringBoot 中使用異步線程完成處理任務(wù),在 SpringBoot 中使用異步線程非常簡(jiǎn)單,只需要兩個(gè)注解就可以搞定,需要的朋友可以參考下
    2023-10-10
  • 使用Eclipse開發(fā)工具如何解決Java Compiler中Annotation Processin不出現(xiàn)的問題

    使用Eclipse開發(fā)工具如何解決Java Compiler中Annotation Processin不出現(xiàn)的問題

    這篇文章主要介紹了使用Eclipse開發(fā)工具如何解決Java Compiler中Annotation Processin不出現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2015-11-11
  • 詳解spring中aop不生效的幾種解決辦法

    詳解spring中aop不生效的幾種解決辦法

    這篇文章主要介紹了詳解spring中aop不生效的幾種解決辦法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Java實(shí)現(xiàn)驗(yàn)證文件名有效性的方法詳解

    Java實(shí)現(xiàn)驗(yàn)證文件名有效性的方法詳解

    在本文中,我們將討論使用?Java?驗(yàn)證一個(gè)給定的字符串是否具有操作系統(tǒng)的有效文件名的不同方法,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-09-09
  • 解決spring-boot使用logback的大坑

    解決spring-boot使用logback的大坑

    這篇文章主要介紹了解決spring-boot使用logback的大坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 簡(jiǎn)單談?wù)凧ava垃圾回收

    簡(jiǎn)單談?wù)凧ava垃圾回收

    本文是看了James Gosling的<<Java程序設(shè)計(jì)語言>>后結(jié)合自己的一些項(xiàng)目經(jīng)驗(yàn),簡(jiǎn)單總結(jié)下關(guān)于java的垃圾回收問題的看法,有需要的小伙伴可以參考下
    2016-05-05
  • SpringMVC自定義類型轉(zhuǎn)換器實(shí)現(xiàn)解析

    SpringMVC自定義類型轉(zhuǎn)換器實(shí)現(xiàn)解析

    這篇文章主要介紹了SpringMVC自定義類型轉(zhuǎn)換器實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Java中的PowerMock使用實(shí)踐

    Java中的PowerMock使用實(shí)踐

    這篇文章主要介紹了Java中的PowerMock使用實(shí)踐,@PrepareForTest和@RunWith是成對(duì)出現(xiàn)的,一般@RunWith(PowerMockRunner.class),@PrepareForTest的值是引用的靜態(tài)方法或私有方法的類,需要的朋友可以參考下
    2023-12-12
  • java8 LocalDate 使用詳解

    java8 LocalDate 使用詳解

    這篇文章主要介紹了java8 LocalDate 使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • SpringBoot整合Redis的哨兵模式的實(shí)現(xiàn)

    SpringBoot整合Redis的哨兵模式的實(shí)現(xiàn)

    Redis提供了哨兵模式來處理主從切換和故障轉(zhuǎn)移,本文主要介紹了SpringBoot整合Redis的哨兵模式的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08

最新評(píng)論