异步任务(注解)
个人理解:同步(Synchronous)和异步的区别,同步:按顺序从上到下执行程序,如在同步方法中调用一个方法,调用者必须等待该方法执行完成,才能继续执行后续方法。异步:可以不用按顺序执行程序,如在异步方法中调用一个方法,调用者无需等待该方法执行完成,就可以继续执行后续方法,立即返回,而再回头执行该调用方法。相当于开一个线程给该方法自己执行。
SpringBoot中开启异步任务需要两个注解@EnableAysnc、@Aysnc。(1)在程序上加上@EnableAysnc,表示开启异步任务。(2)在要执行异步任何的方法加上@Aysnc,系统会开启一个线程去执行该方法。
1,例子说明:
controller类
@RestController
public class Cba {
@Autowired
private Sync sync;
@GetMapping("/ios")
public String page(){
sync.symethod();//整个方法后执行
System.out.println("我是先执行的");
return "执行2";
}
}
service类(+@Async)
@Service
@EnableAsync //开启异步任务,一般放在启动程序上
public class Sync {
@Async
public void symethod(){
System.out.println("prefix");
try{
Thread.sleep(5000);
}catch (Exception e){
}
System.out.println("异步进程睡3s");
}
}
2,测试结果:
加@Async前输出:
- prefix
- 异步进程睡3s
- 我是先执行的
- 页面上一直在等待着相应,3秒后才输出“执行2”
加@Async后输出:
- 我是先执行的
- prefix
- 异步进程睡3s
- 页面上一直立刻输出“执行2”,
总结:从上面结果分析,当要立刻返回“执行2”字符串给页面的时候,如果没有加@Async,是需要等待3秒的,即按顺序执行,等symethod()方法执行完毕后才可以返回,这就是同步执行。当给调用的方法加上@Async注解后,那么该方法就不会从上到下顺序同步的执行,会执行没有@Async的方法,最后再执行有@Async的方法,这就是异步。