91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Springboot中異步線程池怎么配置

發布時間:2021-09-29 16:28:22 來源:億速云 閱讀:361 作者:柒染 欄目:云計算

Springboot中異步線程池怎么配置,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

配置線程池

首先我們需要先編寫 啟用@EnableAsync 的線程池配置類

import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

//啟動異步
@EnableAsync
//這是一個配置類
@Configuration
class TaskPoolConfig {
    //設置Bean的名稱不設置的話沒有辦法在 任務中對應 配置信息
    @Bean("taskExecutor")
    public Executor taskExecutor() {
        //根據ThreadPoolTaskExecutor 創建建線程池
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        //為線程設置初始的線程數量 5條線程
        executor.setCorePoolSize(5);
        //為線程設置最大的線程數量 10條線程
        executor.setMaxPoolSize(10);
        //為任務隊列設置最大 任務數量
        executor.setQueueCapacity(200);
        //設置 超出初始化線程的 存在時間為60秒
        //也就是 如果現有線程數超過5 則會對超出的空閑線程 設置摧毀時間 也就是60秒
        executor.setKeepAliveSeconds(60);
        //設置 線程前綴
        executor.setThreadNamePrefix("taskExecutor-");
        //線程池的飽和策略 我這里設置的是 CallerRunsPolicy 也就是由用調用者所在的線程來執行任務 共有四種
        //AbortPolicy:直接拋出異常,這是默認策略;
        //CallerRunsPolicy:用調用者所在的線程來執行任務;
        //DiscardOldestPolicy:丟棄阻塞隊列中靠最前的任務,并執行當前任務;
        //DiscardPolicy:直接丟棄任務;
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        //設置在關閉線程池時是否等待任務完成
        executor.setWaitForTasksToCompleteOnShutdown(true);
        //設置等待終止的秒數
        executor.setAwaitTerminationSeconds(60);
        //返回設置完成的線程池
        return executor;
    }
}

使用線程池的類

在使用線程池的時候我們需在使用線程池的任務方法上面加上@Async注解

import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
//啟用log 在控制臺輸出信息
@Slf4j
//啟用@Component 注解將該類注入到spring容器中
@Component
public class test {
    //為Hello類方法設置異步調用的配置類
    @Async("taskExecutor")
    public void Hello(String hello) throws InterruptedException {
        //開始執行任務
        log.info("任務開始并延長執行時間");
        //延遲執行
        Thread.sleep(1000);
       //執行輸出
        log.info(hello);
    }
}

測試線程池

編寫測試線程池的方法這利用的idea 的單元測試

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests {
    //自動裝配 線程測試類
    @Autowired
    private test test;
    
    @Test
    public void test() throws Exception {
        //循環跑30個任務
        for (int i = 0;i<30;i++){
            test.Hello("test"+i);
        }
    }
}

這里需要說一下Spring有自己的線程池 我的這個屬于自定義的線程池
同時Spring提供了定時任務調度的注解非常強大 @Scheduled+Cron配置
同時這個定時任務不與線程池發生沖突

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

崇礼县| 柳江县| 陇南市| 安福县| 石景山区| 石柱| 金川县| 常宁市| 沁水县| 阿克陶县| 巴中市| 方城县| 昔阳县| 灵川县| 黄骅市| 茂名市| 时尚| 孝昌县| 炉霍县| 白沙| 河间市| 贺州市| 饶河县| 安远县| 洞口县| 井冈山市| 大荔县| 会宁县| 景东| 河津市| 洛浦县| 开阳县| 通城县| 鄂托克前旗| 枣强县| 石渠县| 长泰县| 文水县| 象州县| 鹰潭市| 琼海市|