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

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發(fā)送https請求代碼實例

    Java發(fā)送https請求代碼實例

    這篇文章主要介紹了Java發(fā)送https請求代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • java字符串比較獲取字符串出現(xiàn)次數(shù)的示例

    java字符串比較獲取字符串出現(xiàn)次數(shù)的示例

    java獲取一個字符串在整個字符串出現(xiàn)的次數(shù),下面寫出我的思路和二個實現(xiàn)方法,大家參考使用吧
    2014-01-01
  • SpringBoot如何使用內(nèi)嵌Tomcat問題

    SpringBoot如何使用內(nèi)嵌Tomcat問題

    這篇文章主要介紹了SpringBoot如何使用內(nèi)嵌Tomcat問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Java編程實現(xiàn)二項分布的采樣或抽樣實例代碼

    Java編程實現(xiàn)二項分布的采樣或抽樣實例代碼

    這篇文章主要介紹了Java編程實現(xiàn)二項分布的采樣或抽樣實例代碼,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Java多線程深入理解

    Java多線程深入理解

    這篇文章主要介紹了java多線程編程實例,分享了幾則多線程的實例代碼,具有一定參考價值,加深多線程編程的理解還是很有幫助的,需要的朋友可以參考下
    2021-07-07
  • Java Swing中的JButton、JComboBox、JList和JColorChooser組件使用案例

    Java Swing中的JButton、JComboBox、JList和JColorChooser組件使用案例

    這篇文章主要介紹了Java Swing中的按鈕(JButton)、組合框(JComboBox)、下拉列表(JList)和顏色選擇器(JColorChooser)組件使用案例,需要的朋友可以參考下
    2014-10-10
  • idea項目報錯缺失maven依賴問題及解決

    idea項目報錯缺失maven依賴問題及解決

    這篇文章主要介紹了idea項目報錯缺失maven依賴問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • 淺談maven的jar包和war包區(qū)別 以及打包方法

    淺談maven的jar包和war包區(qū)別 以及打包方法

    下面小編就為大家分享一篇淺談maven的jar包和war包區(qū)別 以及打包方法,具有很好的參考價值,希望對大家有所幫助
    2017-11-11
  • Java設(shè)計模式之抽象工廠模式淺析講解

    Java設(shè)計模式之抽象工廠模式淺析講解

    當(dāng)系統(tǒng)所提供的工廠所需生產(chǎn)的具體產(chǎn)品并不是一個簡單的對象,而是多個位于不同產(chǎn)品等級結(jié)構(gòu)中屬于不同類型的具體產(chǎn)品時需要使用抽象工廠模式,抽象工廠模式是所有形式的工廠模式中最為抽象和最具一般性的一種形態(tài)
    2022-08-08
  • 淺談Java程序運行機制及錯誤分析

    淺談Java程序運行機制及錯誤分析

    這篇文章主要主要介紹了Java虛擬機(JVM)的有關(guān)內(nèi)容以及Java程序的運行機制和錯誤分析,需要的朋友可以了解下。
    2017-09-09

最新評論