最簡單的多線程集成與使用springBoot

    實現多線程的方式有很多,有基於spring的配置方式,有基於java的bean方式。我比較懶,這裏就講下我認爲最簡單的springBoot集成多線程配置與使用。

一、集成配置多線程

    @Configuration
@EnableAsync
@Slf4j
public class ThreadConfig implements AsyncConfigurer {
    @Override
    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        Integer corePoolSize = LocalHostUtil.getCorePoolSize();
        Integer maxPoolSize = LocalHostUtil.getMaxPoolSize();
        Integer queueCapacity = LocalHostUtil.getQueueCapacity();
        log.info("---------[多線程配置初始化],最大核心線程數:{},最大線程池數量:{},線程處理隊列長度:{}",corePoolSize,maxPoolSize,queueCapacity);
        //核心線程數
        executor.setCorePoolSize(corePoolSize);
        //最大線程池數量
        executor.setMaxPoolSize(maxPoolSize);
        //線程處理隊列長度
        executor.setQueueCapacity(queueCapacity);
        executor.initialize();
        return executor;
    }
    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        log.info("-----------多線程異常handler------------");
        return new SpringAsyncExceptionHandler();
    }
    class SpringAsyncExceptionHandler implements AsyncUncaughtExceptionHandler {
        @Override
        public void handleUncaughtException(Throwable ex, Method method, Object... params) {
            log.error("Asyn無返回異常:"+ ex.getCause().getMessage() + method.getName() + params);
        }
    }
}

就這一個配置類就ok了,LocalHostUtil是取properties配置文件的配置的。一定注意上面的2個註解@Configuration配置類註解
@EnableAsync開啓異步支持

二、多線程使用

 service的實現類寫個方法(這樣不破壞結構),方法依然可以是實現service接口裏的方法,但是一定要注意去掉

@Override註解,而是使用 @Async註解,例如:

@Service
@Transactional
@Slf4j
public class JobCallServiceImpl implements JobCallService{
    @Resource
    private NoticeSendUserMapper noticSendUserMapper;
    
    @Async
    public void smsMsgSend(String noticeId,String lang,String reqId) {

              //你的異步執行邏輯   

}

就這樣,controller裏已經返回數據給調用方了,而後臺會開這個線程再處理業務邏輯。我這裏要的場景就是及時返回調用成功給調用方,然後再邏輯執行完後再異步反饋執行結果。

到此springboot的多線程集成與使用就分享完了,是不是超級簡單。這裏是基於異步支持實現的,我覺得是最簡單的,我最喜歡。
       
        

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章