@Async 注解使用小例子

@Async注解源码:

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Async {
	String value() default "";
}

 

@Async 用于异步调用,由上面源码可知:@Async既可作用于类上,也可作用于方法上,当作用在方法上是只对方法有效,当作用在类上时,对类中的所有方法都有效。

示例:

controller:

@GetMapping("test_async")
public String testAsync(){
    countryService.TestAsync(1);
    countryService.TestAsync2(2);
    log.info("finish");
    return "finish";
}


service:

public interface ICountryService extends IService<Country> {

    void TestAsync(int num);

    void TestAsync2(int num);
}

serviceImpl:

@Service
@Slf4j
@EnableAsync
@EnableCaching
public class CountryServiceImpl extends ServiceImpl<CountryMapper, Country> implements ICountryService {

    @SneakyThrows
    @Override
    @Async
    public void TestAsync(int num) {
        log.info("start async request = {}",num);
        Thread.sleep(2000);
        log.info("finish this request = {}",num);
    }

    @SneakyThrows
    @Override
    @Async
    public void TestAsync2(int num) {
        log.info("start async request = {}",num);
        Thread.sleep(1000);
        log.info("finish this request = {}",num);
    }
}

运行程序,调用controller方法,获得打印结果如下:

2020-07-31 23:38:01.113  INFO 198416 --- [nio-9090-exec-2] c.e.mpdemo.controller.CountryController  : finish
2020-07-31 23:38:01.121  INFO 198416 --- [         task-2] c.e.m.service.impl.CountryServiceImpl    : start async request = 2
2020-07-31 23:38:01.121  INFO 198416 --- [         task-1] c.e.m.service.impl.CountryServiceImpl    : start async request = 1
2020-07-31 23:38:02.123  INFO 198416 --- [         task-2] c.e.m.service.impl.CountryServiceImpl    : finish this request = 2
2020-07-31 23:38:03.122  INFO 198416 --- [         task-1] c.e.m.service.impl.CountryServiceImpl    : finish this request = 1

由此可见,最先打出了finish,说明方法异步,在没有调用内部的方法时,就已经返回了结果。这打印了两个请求,第二个请求执行的时间短先结束,所以先打出了第二个请求结果;

注意:异步方法所在类必须要加上注解 @EnableAsync 开启异步。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值