最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot使用線程池創(chuàng)建多線程的完整示例

 更新時間:2025年03月18日 10:46:38   作者:翱翔-藍天  
在 Spring Boot 2 中,可以使用 @Autowired 注入 線程池(ThreadPoolTaskExecutor 或 ExecutorService),從而管理線程的創(chuàng)建和執(zhí)行,以下是使用 @Autowired 方式注入線程池的完整示例,感興趣的朋友一起看看吧

在 Spring Boot 2 中,可以使用 @Autowired 注入 線程池(ThreadPoolTaskExecutorExecutorService),從而管理線程的創(chuàng)建和執(zhí)行。以下是使用 @Autowired 方式注入線程池的完整示例。

1. 通過 @Autowired 注入 ThreadPoolTaskExecutor

步驟 1:配置線程池

創(chuàng)建 ThreadPoolTaskExecutor@Bean 配置:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
@Configuration
public class ThreadPoolConfig {
    @Bean(name = "customTaskExecutor")
    public Executor taskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(5);  // 核心線程數(shù)
        executor.setMaxPoolSize(10);  // 最大線程數(shù)
        executor.setQueueCapacity(25); // 任務(wù)隊列容量
        executor.setThreadNamePrefix("Async-Executor-"); // 線程名前綴
        executor.initialize();
        return executor;
    }
}

步驟 2:使用 @Autowired 注入線程池

Service 層,通過 @Autowired 注入 ThreadPoolTaskExecutor 并執(zhí)行任務(wù):

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;
import java.util.concurrent.Future;
@Service
public class AsyncTaskService {
    private static final Logger logger = LoggerFactory.getLogger(AsyncTaskService.class);
      @Autowired
    @Qualifier("customTaskExecutor") // 通過 @Qualifier 指定 Bean 名稱
    private ThreadPoolTaskExecutor customTaskExecutor;
    // 提交異步任務(wù)
    public void runAsyncTask() {
        customTaskExecutor.execute(() -> {
            logger.info("異步任務(wù)執(zhí)行,線程名:{}", Thread.currentThread().getName());
            try {
                Thread.sleep(2000); // 模擬耗時任務(wù)
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            logger.info("異步任務(wù)完成,線程名:{}", Thread.currentThread().getName());
        });
    }
    // 提交帶返回值的異步任務(wù)
    public Future<String> runAsyncTaskWithResult() {
        return customTaskExecutor.submit(() -> {
            logger.info("執(zhí)行帶返回值的異步任務(wù),線程名:{}", Thread.currentThread().getName());
            Thread.sleep(2000);
            return "任務(wù)完成";
        });
    }
}

步驟 3:在 Controller 中調(diào)用

Controller 層,通過 @Autowired 調(diào)用 AsyncTaskService

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.Future;
@RestController
@RequestMapping("/task")
public class AsyncTaskController {
    @Autowired
    private AsyncTaskService asyncTaskService;
    @GetMapping("/run")
    public String runTask() {
        asyncTaskService.runAsyncTask();
        return "任務(wù)已提交";
    }
    @GetMapping("/runWithResult")
    public String runTaskWithResult() throws Exception {
        Future<String> result = asyncTaskService.runAsyncTaskWithResult();
        return "任務(wù)結(jié)果:" + result.get();
    }
}

2. 通過 @Autowired 注入 ThreadPoolTaskScheduler(適用于定時任務(wù))

步驟 1:配置 ThreadPoolTaskScheduler

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
@Configuration
public class TaskSchedulerConfig {
    @Bean
    public ThreadPoolTaskScheduler taskScheduler() {
        ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
        scheduler.setPoolSize(5);  // 線程池大小
        scheduler.setThreadNamePrefix("Scheduled-Task-");
        scheduler.initialize();
        return scheduler;
    }
}

步驟 2:在 Service 中使用 @Autowired注入

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.stereotype.Service;
import java.util.concurrent.ScheduledFuture;
@Service
public class ScheduledTaskService {
    private static final Logger logger = LoggerFactory.getLogger(ScheduledTaskService.class);
    @Autowired
    private ThreadPoolTaskScheduler taskScheduler;
    public void scheduleTask() {
        ScheduledFuture<?> future = taskScheduler.scheduleAtFixedRate(() -> {
            logger.info("執(zhí)行定時任務(wù),線程名:{}", Thread.currentThread().getName());
        }, 5000);
    }
}

步驟 3:在 Controller 中調(diào)用

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/schedule")
public class ScheduleTaskController {
    @Autowired
    private ScheduledTaskService scheduledTaskService;
    @GetMapping("/start")
    public String startScheduledTask() {
        scheduledTaskService.scheduleTask();
        return "定時任務(wù)已啟動";
    }
}

3. 通過 @Autowired 注入 ExecutorService

如果你更喜歡 Java 原生的 ExecutorService,可以使用 @Bean 配置:

步驟 1:定義 ExecutorService 線程池

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@Configuration
public class ExecutorServiceConfig {
    @Bean
    public ExecutorService fixedThreadPool() {
        return Executors.newFixedThreadPool(5);
    }
}

步驟 2:在 Service 中注入 ExecutorService

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.util.concurrent.ExecutorService;
@Service
public class ExecutorServiceTask {
    private static final Logger logger = LoggerFactory.getLogger(ExecutorServiceTask.class);
    @Autowired
    private ExecutorService executorService;
    public void executeTask() {
        executorService.execute(() -> {
            logger.info("執(zhí)行任務(wù),線程名:{}", Thread.currentThread().getName());
        });
    }
}

步驟 3:在 Controller 中調(diào)用

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/executor")
public class ExecutorServiceController {
    @Autowired
    private ExecutorServiceTask executorServiceTask;
    @GetMapping("/run")
    public String runTask() {
        executorServiceTask.executeTask();
        return "任務(wù)已提交";
    }
}

總結(jié)

方式適用場景配置方式
ThreadPoolTaskExecutor普通異步任務(wù) (@Asyncexecute)@Autowired private ThreadPoolTaskExecutor
ThreadPoolTaskScheduler定時任務(wù)@Autowired private ThreadPoolTaskScheduler
ExecutorService原生 Java 線程池@Autowired private ExecutorService

推薦方式

  • 使用 ThreadPoolTaskExecutor 結(jié)合 @Autowired 來管理異步任務(wù)(推薦)。
  • 使用 ThreadPoolTaskScheduler 進行定時任務(wù)調(diào)度。
  • 避免直接使用 ExecutorService,因為它不受 Spring 管理,不能動態(tài)調(diào)整線程池參數(shù)。

這樣可以 充分利用 Spring Boot 線程池管理,提高系統(tǒng)性能,減少資源消耗,并且代碼更易維護! ??

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

相關(guān)文章

  • Java如何使用Set接口存儲沒有重復(fù)元素的數(shù)組

    Java如何使用Set接口存儲沒有重復(fù)元素的數(shù)組

    Set是一個繼承于Collection的接口,即Set也是集合中的一種。Set是沒有重復(fù)元素的集合,本篇我們就用它存儲一個沒有重復(fù)元素的數(shù)組
    2022-04-04
  • Java容器類源碼詳解 Deque與ArrayDeque

    Java容器類源碼詳解 Deque與ArrayDeque

    這篇文章主要介紹了Java容器類源碼詳解 Deque與ArrayDeque,Deque 接口繼承自 Queue接口,但 Deque 支持同時從兩端添加或移除元素,因此又被成為雙端隊列。,需要的朋友可以參考下
    2019-06-06
  • JMeter參數(shù)化4種實現(xiàn)方式(小結(jié))

    JMeter參數(shù)化4種實現(xiàn)方式(小結(jié))

    參數(shù)化是自動化測試腳本的一種常用技巧,可將腳本中的某些輸入使用參數(shù)來代替,JMeter提供了多種參數(shù)化方式,下面就其中常用的4種展開闡述,感興趣的可以來了解一下
    2021-12-12
  • RocketMq事務(wù)消息發(fā)送代碼流程詳解

    RocketMq事務(wù)消息發(fā)送代碼流程詳解

    這篇文章主要介紹了RocketMq事務(wù)消息發(fā)送代碼流程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • 深入理解Java抽象類

    深入理解Java抽象類

    這篇文章主要介紹了Java抽象類的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-08-08
  • Spring Security 安全框架應(yīng)用原理解析

    Spring Security 安全框架應(yīng)用原理解析

    這篇文章主要介紹了Spring Security 安全框架應(yīng)用,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • Java輕松實現(xiàn)在Word中插入頁眉頁腳的實用指南

    Java輕松實現(xiàn)在Word中插入頁眉頁腳的實用指南

    在現(xiàn)代企業(yè)應(yīng)用中,Java 開發(fā)者經(jīng)常需要處理各種文檔操作,本文將深入探討如何利用功能強大的 Spire.Doc for Java 庫輕松實現(xiàn)各種頁眉頁腳的插入需求,需要的小伙伴可以了解下
    2025-09-09
  • java輸入空行結(jié)束問題

    java輸入空行結(jié)束問題

    這篇文章主要介紹了java輸入空行結(jié)束問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Java 實戰(zhàn)項目之在線點餐系統(tǒng)的實現(xiàn)流程

    Java 實戰(zhàn)項目之在線點餐系統(tǒng)的實現(xiàn)流程

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實現(xiàn)一個在線點餐系統(tǒng),大家可以在過程中查缺補漏,提升水平
    2021-11-11
  • java排序算法圖文詳解

    java排序算法圖文詳解

    這篇文章主要為大家詳細介紹了Java經(jīng)典排序算法之歸并排序,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望可以對你有所幫助
    2021-07-07

最新評論

蓬莱市| 武夷山市| 乌恰县| 刚察县| 长寿区| 白水县| 泰州市| 长春市| 永康市| 通化县| 黑河市| 运城市| 行唐县| 会宁县| 辽中县| 印江| 西乡县| 且末县| 河源市| 江口县| 开封县| 济宁市| 瑞安市| 麻栗坡县| 仪陇县| 松江区| 蒙山县| 怀化市| 桃园市| 双流县| 静海县| 大英县| 北辰区| 新干县| 通江县| 花莲县| 平邑县| 修水县| 阳春市| 中江县| 冕宁县|