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