spring -多線程

Spring 通過 "任務(wù)執(zhí)行器" (TaskExecutor) 來實現(xiàn)多線程和并發(fā)編程 , 一般使用ThreadPoolTaskExecutor 可以實現(xiàn)一個基于線程池的 TaskExecutor 。
而實際開發(fā)任務(wù)中一般是非阻礙的,就是異步的,所以我們要在配置類中通過 @EnableAsync 開啟對異步任務(wù)的支持 , 并通過在實際執(zhí)行的 Bean 的方法中使用 @Async 注解來聲明他是一個一部任務(wù)

配置類

@Configuration
@ComponentScan("com.wangzai.springboot.thread.async")
//開啟異步支持
@EnableAsync
public class TaskExecutorConfig implements AsyncConfigurer {

    //實現(xiàn)AsyncConfigurer 并重寫getAsyncExecutor返回一個ThreadPoolTaskExecutor 這樣我們就獲得了一個基于線程池TaskExecutor
    @Override
    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
        taskExecutor.setCorePoolSize(5);
        taskExecutor.setMaxPoolSize(10);
        taskExecutor.setQueueCapacity(25);
        taskExecutor.initialize();
        return taskExecutor;
    }

    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        return null;
    }
}

執(zhí)行類

@Service
public class AsyncTaskService {
    
    //通過@Async表明該方法是一個異步方法,如果注解在類級別,則表明該類所有的方法都是異步方法,這里的方法自動被注入使用ThreadPoolTaskExecutor 作為 TaskExecutor。
    @Async
    public void executeAsyncTask(Integer i) {
        System.out.println("執(zhí)行異步任務(wù)" + i);
    }
    
    
    @Async
    public void executeAsyncTaskPlus(Integer i ) {
        System.out.println("執(zhí)行任務(wù) + 1" + (i+1));
    }

}

啟動器

public class ApplicationAsync {
    public static void main(String[] args) {
        //我們加載配置 , 就是我們剛才配置了異步和Bean的類 ,這樣我們異步啟動了 
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(TaskExecutorConfig.class);
        //我們這里用剛才獲取的Context來獲取AsyncTask 這個時候異步配置已經(jīng)開啟啦~
        AsyncTaskService asyncTaskService = context.getBean(AsyncTaskService.class);
        
        for (int i = 0 ; i < 10 ; i ++) {
            asyncTaskService.executeAsyncTask(i);
            asyncTaskService.executeAsyncTaskPlus(i);
        }
        context.close();
    }
}

添加了異步注解,我們在執(zhí)行的時候 for () 循環(huán)10次 , 那就是20個并發(fā),效果:
執(zhí)行任務(wù) +1 :1
執(zhí)行異步任務(wù)1
執(zhí)行異步任務(wù)3
執(zhí)行任務(wù) +1 :4
執(zhí)行異步任務(wù)4
執(zhí)行任務(wù) +1 :5
執(zhí)行異步任務(wù)5
執(zhí)行任務(wù) +1 :6
執(zhí)行異步任務(wù)6
執(zhí)行任務(wù) +1 :7
執(zhí)行異步任務(wù)7
執(zhí)行任務(wù) +1 :8
執(zhí)行異步任務(wù)8
執(zhí)行任務(wù) +1 :9
執(zhí)行異步任務(wù)9
執(zhí)行任務(wù) +1 :10
執(zhí)行異步任務(wù)2
執(zhí)行任務(wù) +1 :2
執(zhí)行異步任務(wù)0
執(zhí)行任務(wù) +1 :3

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,678評論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,283評論 6 342
  • 從三月份找實習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍(lán)閱讀 42,850評論 11 349
  • 文 | cavie 有人說,讀史可以讓人明智。 個人愚見(如下): 真的信史,往往教給了我們一些哲思的經(jīng)驗教訓(xùn),讀...
    cavie閱讀 502評論 1 1
  • 輝子是我的發(fā)小。瘦瘦的,憨厚但帥氣。 愛笑。脾氣特好。小時候偷玉米馬鈴薯,攢著小錢去游戲廳?;咀鰤氖露紟е:?..
    一個寫信人閱讀 352評論 3 3

友情鏈接更多精彩內(nèi)容