异步:
@async
并发设计模式包括Future ,“回调驱动(多线程环境下)”、“
有返回值的话不行,
Future.get() 貌似阻塞的,最好写成
if(Future.isDone()){
Future.get();
}
调用Future.isDone()判断引用的对象是否就绪,并采取不同的处
理;而后一种情况则只需调用get()或
get(long timeout, TimeUnit unit)通过同步阻塞方式等待对象就
绪。实际运行期是阻塞还是立即返回就取决于get()的调用时机和
对象就绪的先后了。
@async
并发设计模式包括Future ,“回调驱动(多线程环境下)”、“
/**
* 保存日志
* @param log
* @param msg
* @author Miku Liu
*/
@Async
public void saveLog(TInterfaceLog log,TInterfaceLogMsg msg){
tinterfaceLogDao.save(log);
tinterfaceLogMsgDao.save(msg);
}
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-4.0.xsd">
<context:annotation-config />
<!--扫描注解 -->
<context:component-scan base-package="com.xx.yy.*" />
<!-- 支持异步方法执行 -->
<task:annotation-driven />
</beans>
异步方法有可能因为某些问题而失效。常见的异步失效原因有:
1、异步方法和调用类不要在同一个类中
2、注解扫描时,要注意过滤,避免重复实例化,因为存在覆盖问题,@Async就失效了
有返回值的话不行,
Future.get() 貌似阻塞的,最好写成
if(Future.isDone()){
Future.get();
}
调用Future.isDone()判断引用的对象是否就绪,并采取不同的处
理;而后一种情况则只需调用get()或
get(long timeout, TimeUnit unit)通过同步阻塞方式等待对象就
绪。实际运行期是阻塞还是立即返回就取决于get()的调用时机和
对象就绪的先后了。