1. 程式人生 > >SpringBoot配置多執行緒

SpringBoot配置多執行緒

在SpringBoot專案中配置和使用多執行緒非常簡單,步驟如下.

1.多執行緒配置:

/**
 * 執行緒池配置
 * 
 * @author dongchuan
 */
@Configuration
@EnableAsync
public class AsyncTaskConfig implements AsyncConfigurer {

    private static final Logger logger = LoggerFactory.getLogger(AsyncTaskConfig.class);

    /**
     * ThredPoolTaskExcutor的處理流程 當池子大小小於corePoolSize,就新建執行緒,並處理請求
     * 當池子大小等於corePoolSize,把請求放入workQueue中,池子裡的空閒執行緒就去workQueue中取任務並處理
     * 當workQueue放不下任務時,就新建執行緒入池,並處理請求,如果池子大小撐到了maximumPoolSize,就用RejectedExecutionHandler來做拒絕處理
     * 當池子的執行緒數大於corePoolSize時,多餘的執行緒會等待keepAliveTime長時間,如果無請求可處理就自行銷燬
     */
    @Override
    @Bean(name = "taskExecutor")
    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
        // 最小執行緒數(核心執行緒數)
        taskExecutor.setCorePoolSize(4);
        // 最大執行緒數
        taskExecutor.setMaxPoolSize(8);
        // 等待佇列(佇列最大長度)
        taskExecutor.setQueueCapacity(16);
        taskExecutor.initialize();
        return taskExecutor;
    }

    /**
     * 非同步異常處理
     * 
     * @return
     */
    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        return new SpringAsyncExceptionHandler();
    }

    class SpringAsyncExceptionHandler implements AsyncUncaughtExceptionHandler {
        @Override
        public void handleUncaughtException(Throwable throwable, Method method, Object... obj) {
            logger.error("Exception occurs in async method", throwable.getMessage());
        }
    }
}

2.呼叫demo:

@Controller
@Slf4j
public class TestController {

    @Autowired
    private ThreadPoolTaskExecutor taskExecutor;

    @RequestMapping("/test/asyn")
    @ResponseBody
    public String asyn() {
		taskExecutor.execute(() -> {
			try {
				log.info("非同步開始" + System.currentTimeMillis());
				Thread.sleep(10000);
				log.info("非同步結束" + System.currentTimeMillis());
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		});
		return "kerry dong";
    }

用postman請求介面會發現直接返回字串(並沒有等待10秒),說明taskExecutor.execute()方法內的程式碼是非同步執行的.

相關推薦

SpringBoot配置執行

在SpringBoot專案中配置和使用多執行緒非常簡單,步驟如下. 1.多執行緒配置: /** * 執行緒池配置 * * @author dongchuan */ @Configuration @EnableAsync public class AsyncTas

springboot執行開發注意事項

基於springboot的多執行緒程式開發過程中,由於本身也需要注入spring容器進行管理,才能發揮springboot的優勢。所以這篇文字主要用來記錄開發中兩者結合時需要注意的一些事項。 第一步我們把執行緒類的例項注入sping容器進行管理 @Configuration @SpringBootAppli

SpringBatch配置執行step

SpringBatch批處理框架預設使用單執行緒完成任務的執行,但是他提供了對執行緒池的支援。使用tasklet的task-executor屬性可以很容易的將普通的step轉成多執行緒的step。 task-executor:任務執行處理器,定義後採用多執行緒執行任務,需

Mysql 5.7 從節點配置執行主從複製

Mysql 5.7 對主從複製增加了一種型別,共有兩種型別,如下:DATABASE 基於庫的並行複製 , 每個資料庫對應一個複製執行緒LOGICAL_CLOCK 基於組提交的並行複製方式,同一個資料庫下可以有多個執行緒下面的步驟,在從節點上進行配置。檢視當前配置在開始配置之前,我們先看一下當前配置下的主從複製

SpringBoot實現執行

一.配置多執行緒》在配置/啟動類上添加註解開啟非同步支援:@EnableAsync》在需要執行非同步的方法上新增非同步方法註解:@Async,通過@Async註解表明該方法是一個非同步方法,如果註解在類級別,表明該類下所有方法都是非同步方法,程式碼如下@Service pub

springboot動態配置定時任務2種方式,整合Quartz執行併發執行個定時任務配置

我的專案是採用的idea+gradle+springboot專案構建,下面是springboot實現定時任務所需要的jar包 //定時任務使用 compile group: 'org.quartz-scheduler', name: 'quartz', version:

SpringBoot 定時執行配置執行執行

Spring Boot 的定時任務: 第一種:把引數配置到.properties檔案中: 程式碼: package com.accord.task;   import java.text.SimpleDateFormat; import java.util.Date;

Springboot 2.0.* 及低版本定時任務@Scheduled執行配置

1. 首先在springboot啟動類上新增 @EnableScheduling 註解。 import org.spr

SpringBoot實戰實現分散式鎖一之重現執行高併發場景

實戰前言:上篇博文我總體介紹了我這套視訊課程:“SpringBoot實戰實現分散式鎖” 總體涉及的內容,從本篇文章開始,我將開始介紹其中涉及到的相關知識要點,感興趣的小夥伴可以關注關注學習學習!!工欲善其事,必先利其器,介紹分散式鎖使用的前因後果之前,得先想辦法說清楚為啥需要分散式鎖以及

SpringBoot系統列 3 - 執行資料處理(ThreadPoolTaskExecutor、DruidDataSource)

在上篇文章的基礎上進行改造: package com.hello.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Au

33. springboot靜態定時任務——執行

1、pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocatio

Java執行-----執行池的使用,原理以及舉例實現(三)(四):使用樣例及如何配置執行池大小

三.使用示例   前面我們討論了關於執行緒池的實現原理,這一節我們來看一下它的具體使用: public class Test { public static void main(String[] args) { ThreadPoolExe

從零開始學執行之自定義配置執行池(七)

等待其他資源,可能會產生執行緒飢餓死鎖 線上程池中如果一個任務依賴於其它任務的執行,就可能產生死鎖.在一個單執行緒化的Executor中,提交兩個任務,任務二滯留在工作佇列中等待第一個任務完成,但是第一個任務不會完成,因為它在等待第二個任務的完成(需要第二個任務執行的結果進行運算),這就會發生死鎖. 在一個大

ThreadPoolTaskExecutor執行使用,及執行配置

1.配置 ThreadPoolTaskExecutor bean <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"

017.執行-執行池原理解析以及合理配置

public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveT

執行配置

@Configuration @EnableAsync public class AsyncTaskConfig implements AsyncConfigurer { @Override @Bean public Executor getAsyncExecutor() {

Springboot專案,執行測試使用Redis生成訂單id

Springboot專案,多執行緒測試使用Redis生成訂單id springboot測試類: import org.junit.After; import org.junit.Before; import org.junit.runner.RunWith; import org

SpringBoot注入例項,執行處理方式

Spring-Boot中如何使用多執行緒處理任務  看到這個標題,相信不少人會感到疑惑,回憶你們自己的場景會發現,在Spring的專案中很少有使用多執行緒處理任務的,沒錯,大多數時候我們都是使用Spring MVC開發的web專案,預設的Controller,Service,

cmake配置基本工程和執行

什麼是cmake? 大家都知道自linux上寫的c/c++程式,在編譯連結單個或者多個檔案時為了方便,我們都會寫一個MakeFile檔案,然後在命令列執行make命令。cmake就是生成MakeFile檔案的工具。 這是cmake的下載地址https://c

springboot執行程式設計

spring通過任務執行器TaskExecutor來實現多執行緒和併發程式設計。 使用ThreadPoolTaskExecutor可實現一個基於執行緒池的TaskExecutor。 而實際開發中任務一般是非阻塞的,即非同步的,所以我們要在配置類中通過@EnableAsync