springboot初始学习笔记2之@Async
1、@Async 异步执行方法:异步调用则是只是发送了调用的指令,调用者无需等待被调用的方法完全执行完毕;而是继续执行下面的流程。同步就是整个处理过程顺序执行,当各个过程都执行完毕,并返回结果。
在执行@Async 所标注的方法时,会将被注解的方法独立的启动一个线程来执行,主程序无需等待该被@Async 注解的方法的完成。
举例:
1.1 在controller层调用被注解的方法
@Controller
@Slf4j
public class MemberController {
@Autowired
private MemberService member ;
@RequestMapping("/member")
@ResponseBody
public String member(){
log.info("1");
String result = member.memser();
log.info("4");
return result;
}
}
1.2 被@Aaync注解的方法的位置
@Service
@Slf4j
public class MemberService {
// 在运行时单独开启一个线程来执行该方法
@Async
public String memser() {
log.info("2");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
log.info("3");
return "adeline";
}
}
1.3在程序入口开启异步执行方法
@SpringBootApplication
@EnableAsync//开启异步执行方法
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
1.4 程序开启后,在浏览器输入http://localhost:8080/member,会发现程序先输出的执行结果,后台的程序还在执行,在springboot的环境下运行结果为:
1.5被@Async注解的方法等价于给该方法单独开启了线程
@Service
@Slf4j
public class MemberService {
public String memser() {
// 加@Async注解的作用相当于
new Thread(new Runnable() {
public void run() {
log.info("2");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
log.info("3");
}
}).start();
return "adeline";
}
}
运行结果为: