springboot 整合線程池(通俗易懂)

廢話少說,直接上代碼

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.core.task.AsyncTaskExecutor; 
import org.springframework.scheduling.annotation.EnableAsync; 
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; 
import java.util.concurrent.*;

@Configuration
@EnableAsync public class SpringAsyncConfig {

    @Bean("taskExecutor") public Executor asyncServiceExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); // 設(shè)置核心線程數(shù)
        executor.setCorePoolSize(5); // 設(shè)置最大線程數(shù)
        executor.setMaxPoolSize(20); //配置隊(duì)列大小
        executor.setQueueCapacity(Integer.MAX_VALUE); // 設(shè)置線程活躍時(shí)間(秒)
        executor.setKeepAliveSeconds(60); // 設(shè)置默認(rèn)線程名稱
        executor.setThreadNamePrefix("獲取旺旺信息"); // 等待所有任務(wù)結(jié)束后再關(guān)閉線程池
        executor.setWaitForTasksToCompleteOnShutdown(true); //執(zhí)行初始化
        executor.initialize(); 
        return executor;
    }
}

controller層

import com.yzx.caasscs.controller.BaseController; 
import com.yzx.caasscs.service.Thread.AsyncService; 
import com.yzx.caasscs.vo.ResultVO; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RestController; 

/** * @author qjwyss
 * @date 2018/10/12
 * @description */ 
@RestController 
public class ThreadController extends BaseController { 
    private static final Logger logger = LoggerFactory.getLogger(ThreadController.class);

    @Autowired private AsyncService asyncService;

    @GetMapping("/sss") 
    public ResultVO<Void> sss(){ //調(diào)用service層的任務(wù)
         asyncService.executeAsync(); 
         return ResultVO.getSuccess("OK");
    }
}

service

public interface AsyncService { /** * 執(zhí)行異步任務(wù) */
    void executeAsync();

}

serviceImpl

import com.yzx.caasscs.service.Thread.AsyncService; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.scheduling.annotation.Async; 
import org.springframework.stereotype.Service;

@Service 
public class AsyncServiceImpl implements AsyncService { 
    private static final Logger logger = LoggerFactory.getLogger(AsyncServiceImpl.class);

    @Async("taskExecutor")
    @Override public void executeAsync() {
        logger.info("start executeAsync"); try {
            System.out.println("當(dāng)前運(yùn)行的線程名稱:" + Thread.currentThread().getName());
        } catch (Exception e) {
            e.printStackTrace();
        }
        logger.info("end executeAsync");
    }

}

@Async和@EnableAsync要結(jié)合使用,才能發(fā)揮異步的效果

建議把所有帶有@Async的方法都放到同一個(gè)類里,不然很容易出現(xiàn)循環(huán)依賴的問題

https://www.cnblogs.com/shisanye/p/13535392.html

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

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

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