1、@Async失效場(chǎng)景
一、異步方法使用static修飾
二、異步類沒有使用@Component注解(或其他注解)導(dǎo)致spring無法掃描到異步類
三、異步方法不能與異步方法在同一個(gè)類中
四、類中需要使用@Autowired或@Resource等注解自動(dòng)注入,不能自己手動(dòng)new對(duì)象
五、如果使用SpringBoot框架必須在啟動(dòng)類中增加@EnableAsync注解
六、在Async 方法上標(biāo)注@Transactional是沒用的。 在Async 方法調(diào)用的方法上標(biāo)注@Transactional 有效。
七、調(diào)用被@Async標(biāo)記的方法的調(diào)用者不能和被調(diào)用的方法在同一類中不然不會(huì)起作用!。。。。!
八、使用@Async時(shí)要求是不能有返回值的不然會(huì)報(bào)錯(cuò)的 因?yàn)楫惒揭笫遣魂P(guān)心結(jié)果的
2、代碼案例
我們?cè)谑褂枚嗑程的時(shí)候,往往需要?jiǎng)?chuàng)建Thread類,或者實(shí)現(xiàn)Runnable接口,如果要使用到線程池,我們還需要來創(chuàng)建Executors。
在使用spring中,已經(jīng)給我們做了很好的支持。只需要添加 @EnableAsync 就可以使用多線程。使用 @Async 就可以定義一個(gè)線程任務(wù)。通過spring給我們提供的ThreadPoolTaskExecutor就可以使用線程池。
默認(rèn)情況下,Spring將搜索相關(guān)的線程池定義:要么在上下文中搜索唯一的TaskExecutor bean,要么搜索名為“taskExecutor”的Executor bean。如果兩者都無法解析,則將使用SimpleAsyncTaskExecutor來處理異步方法調(diào)用。
3、異步方法各參數(shù)的詳細(xì)說明
還可以看看
其他文章,謝謝您的閱讀。
網(wǎng)站申明:系本文編輯轉(zhuǎn)載,來源于網(wǎng)絡(luò),目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé),所有權(quán)歸屬原作者。如內(nèi)容、圖片有任何版權(quán)問題,請(qǐng)
聯(lián)系我們刪除。