1、@Async失效場景
一、異步方法使用static修飾
二、異步類沒有使用@Component注解(或其他注解)導(dǎo)致spring無法掃描到異步類
三、異步方法不能與異步方法在同一個類中
四、類中需要使用@Autowired或@Resource等注解自動注入,不能自己手動new對象
五、如果使用SpringBoot框架必須在啟動類中增加@EnableAsync注解
六、在Async 方法上標(biāo)注@Transactional是沒用的。 在Async 方法調(diào)用的方法上標(biāo)注@Transactional 有效。
七、調(diào)用被@Async標(biāo)記的方法的調(diào)用者不能和被調(diào)用的方法在同一類中不然不會起作用!!!!!!!
八、使用@Async時要求是不能有返回值的不然會報錯的 因為異步要求是不關(guān)心結(jié)果的
2、代碼案例
我們在使用多線程的時候,往往需要創(chuàng)建Thread類,或者實現(xiàn)Runnable接口,如果要使用到線程池,我們還需要來創(chuàng)建Executors。
在使用spring中,已經(jīng)給我們做了很好的支持。只需要添加 @EnableAsync 就可以使用多線程。使用 @Async 就可以定義一個線程任務(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)贊同其觀點和對其真實性負(fù)責(zé),所有權(quán)歸屬原作者。如內(nèi)容、圖片有任何版權(quán)問題,請
聯(lián)系我們刪除。