在項目中使用多線程,除了常用的構(gòu)建一個線程池工具類,在springboot中,還可以使用注解來實(shí)現(xiàn),看下面的例子。
首先使用springboot 1.5.10版本,來看pom文件:

使用注解實(shí)現(xiàn)異步操作不需要引入任何額外依賴。下一步需要把啟動異步的注解配置在啟動類上面:

然后再手動配置一個線程池:

這樣關(guān)于注解異步執(zhí)行的配置就完成了。下面寫實(shí)際的異步方法:

注意@Async注解可以放在需要異步執(zhí)行的方法上面,也可以放在整個類上面,表示類中的所有方法都是異步的。然后寫一個簡單的接口:

可以看到接口中代碼的順序是,先調(diào)用的異步方法,在執(zhí)行controller日志打印,現(xiàn)在來啟動項目,調(diào)用接口,查看日志:

可以看到,雖然先調(diào)用out方法,但是controller的日志打印卻是先執(zhí)行的,確實(shí)是異步執(zhí)行。下面我們來把out方法的異步注解去掉:

重啟項目,調(diào)用接口,查看日志:

可以看到去掉注解后執(zhí)行順序變成了同步。上面的線程池配置類如果不寫,那么會使用默認(rèn)的線程池,不過建議都要進(jìn)行配置,這樣可以根據(jù)服務(wù)器的性能進(jìn)行調(diào)整,更加合理。
下面來看2.1.6版本的springboot的使用,比起老版本更加簡單,不需要再寫線程池配置類,只需要在配置文件中配置即可:

注釋掉配置類,重啟項目:

可以看到高版本的使用更加簡潔,對代碼無污染!定時任務(wù)也是一樣,在啟動類上加上啟用注解:

增加線程池配置:

寫幾個測試定時任務(wù):

啟動查看定時任務(wù)線程池效果:

可以看到定時任務(wù)使用的是單獨(dú)配置的線程池!也可以讓定時任務(wù)使用async注解配置的線程池,去掉定時任務(wù)線程池配置,在定時任務(wù)類上面加上@Async注解:

可以看到運(yùn)行效果:

雖然用注解的方式配置一個線程池非常方便,可以到處使用,但是還是建議給定時任務(wù)單獨(dú)配置一個,不過資源分配小一些,比如分配兩三個核心線程數(shù)量,這樣定時任務(wù)和業(yè)務(wù)都可以保證一定的系統(tǒng)資源,且互不影響!
代碼地址: https://gitee.com/blueses/spring-boot-demo