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

SpringBoot 整合線程池的示例詳解

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

線程池簡介

什么是線程池

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

線程池的優(yōu)點

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

1.啟動類加 @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
}

注意:導致 @Async 注解失效的幾個原因

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

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

默認的線程池配置如下

# 核心線程數(shù)
spring.task.execution.pool.core-size=8  
# 最大線程數(shù)
spring.task.execution.pool.max-size=16
# 空閑線程存活時間
spring.task.execution.pool.keep-alive=60s
# 是否允許核心線程超時
spring.task.execution.pool.allow-core-thread-timeout=true
# 線程隊列數(shù)量
spring.task.execution.pool.queue-capacity=100
# 線程關閉等待
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ù)
        executor.setCorePoolSize(10);
        //設置最大線程數(shù)
        executor.setMaxPoolSize(20);
        //設置隊列容量
        executor.setQueueCapacity(20);
        //設置線程活躍時間
        executor.setKeepAliveSeconds(30);
        //設置線程名稱前綴
        executor.setThreadNamePrefix("sendSms-");
        //設置拒絕策略
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        //等待所有任務結束后再關閉線程池
        executor.setWaitForTasksToCompleteOnShutdown(true);
        //設置線程池中任務的等待時間
        executor.setAwaitTerminationSeconds(60);
        return executor;
    }
}

配置多個線程池

有時候,一個項目中如果配置了多個線程池,那需要在 @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注解時就需要指明具體使用的線程池,如下格式

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

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

相關文章

  • 淺談一下SpringBoot中的異步任務

    淺談一下SpringBoot中的異步任務

    這篇文章主要介紹了淺談一下SpringBoot中的異步任務,SpringBoot 中的異步任務主要是指在 SpringBoot 中使用異步線程完成處理任務,在 SpringBoot 中使用異步線程非常簡單,只需要兩個注解就可以搞定,需要的朋友可以參考下
    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)的相關資料,需要的朋友可以參考下
    2015-11-11
  • 詳解spring中aop不生效的幾種解決辦法

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

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

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

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

    解決spring-boot使用logback的大坑

    這篇文章主要介紹了解決spring-boot使用logback的大坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 簡單談談Java垃圾回收

    簡單談談Java垃圾回收

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

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

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

    Java中的PowerMock使用實踐

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

    java8 LocalDate 使用詳解

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

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

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

最新評論