版權聲明:本文爲原創文章,轉載請註明轉自Clement-Xu的csdn博客。html
這個註解用於標註某個方法或某個類裏面的全部方法都是須要異步處理的。被註解的方法被調用的時候,會在新線程中執行,而調用它的方法會在原來的線程中執行。這樣能夠避免阻塞、以及保證任務的實時性。適用於處理log、發送郵件、短信……等。java
註解的應用範圍:數據庫
相關的配置:編程
<task:annotation-driven />配置:app
例子:異步
<task:annotation-driven executor="asyncExecutor" />async
<task:executor />配置參數:ide
配置例子:spa
<task:annotation-driven executor="asyncExecutor" />.net
<task:executor id="asyncExecutor" pool-size="100-10000" queue-capacity="10"/>
實例:
[html] view plain copy
[java] view plain copy
(注意:若是在同一個類中調用的話,不會生效,緣由請參考:http://blog.csdn.net/clementad/article/details/47339519)
經過log能夠看到,已經分開兩個線程執行:
線程的優先級和類型:
優先級:NORM_PRIORITY
類型:非守護線程
用戶線程(User Thread):JVM會等待全部的用戶線程結束後才退出;當系統中沒有用戶線程了,JVM也就退出了
守護線程(Daemon Thread):通常是爲其餘線程提供服務的線程,好比GC垃圾回收器;JVM退出時,不會管守護線程是否存在,而是直接退出
因此,對於文件、數據庫的操做,不適宜使用守護線程,否則可能會丟失數據!
Web應用中止時,Spring容器會被關閉,調用者若是是Spring bean,就會中止生成新任務。然而,線程池中已經在運行的任務,因爲缺省是用戶線程,因此JVM會等待它們結束後才退出。
附:Java編程方式的配置方法:
[java] view plain copy
(原創文章,轉載請註明轉自Clement-Xu的博客:http://blog.csdn.net/clementad/article/details/47403185)