使用方法寻定。
- 在配置處添加 @EnableAsync 以啟動(dòng)異步調(diào)用功能。如:
@EnableAsync
@Configuration
public class HelloConfiguration {
}
或者
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
- 在Service中的方法上注解@Async精耐,然后再在Controller中調(diào)用該方法狼速,即該方法會(huì)異步執(zhí)行。
@Async
public void innerBegin() {
System.out.println("innerBegin start.");
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("innerBegin end.");
}
- 特殊情形1:如果Controller調(diào)用的Service方法begin沒有@Async卦停,但是方法begin調(diào)用了內(nèi)部的一個(gè)@Async方法innerBegin向胡,那么innerBegin也不會(huì)異步執(zhí)行。
public void begin() {
System.out.println("begin start.");
this.innerBegin();
System.out.println("begin end.");
}
@Async
public void innerBegin() {
System.out.println("innerBegin start.");
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("innerBegin end.");
}
- 特殊情形2:如果Controller調(diào)用的Service方法begin有@Async惊完,方法begin調(diào)用了內(nèi)部的一個(gè)@Async方法innerBegin僵芹,那么begin會(huì)異步執(zhí)行,而innerBegin不會(huì)異步執(zhí)行小槐,相當(dāng)于innerBegin的@Async注解這時(shí)候沒用了拇派。
@Async
public void begin() {
System.out.println("begin start.");
this.innerBegin();
System.out.println("begin end.");
}
@Async
public void innerBegin() {
System.out.println("innerBegin start.");
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("innerBegin end.");
}
總結(jié):使用@Async必須要依賴@EnableAsync來啟用。外部調(diào)用Service的@Async方法可以異步執(zhí)行凿跳,Service調(diào)用自己的@Async方法不能異步執(zhí)行件豌。