版权声明:本文为原创文章,转载请注明转自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)