素材巴巴 > 程序开发 >

@Async和@EnableAsync的用法

程序开发 2023-09-17 09:03:25

我们在使用多线程的时候,往往需要创建Thread类,或者实现Runnable接口,如果要使用到线程池,我们还需要来创建Executors,在使用spring中,已经给我们做了很好的支持。只要要@EnableAsync就可以使用多线程。使用@Async就可以定义一个线程任务。通过spring给我们提供的ThreadPoolTaskExecutor就可以使用线程池。

如下图所示:定义一个线程池config类
在这里插入图片描述

定义一个异步任务类
在这里插入图片描述
在controller里面调用两个异步任务(会用掉线程池里面的两个线程)

在这里插入图片描述
打印日志如下:
在这里插入图片描述
从日志中可以看出,当调用了用@Async修饰的异步方法后,实现了多线程异步调用,两个异步任务交替运行。
使用这个是需要注意的地方:
一、异步方法使用static修饰
二、异步类没有使用@Component注解(或其他注解)导致spring无法扫描到异步类
三、异步方法不能与异步方法在同一个类中
四、类中需要使用@Autowired或@Resource等注解自动注入,不能自己手动new对象
五、如果使用SpringBoot框架必须在启动类中增加@EnableAsync注解
六、在Async 方法上标注@Transactional是没用的。 在Async 方法调用的方法上标注@Transactional 有效。
七、调用被@Async标记的方法的调用者不能和被调用的方法在同一类中不然不会起作用
八、使用@Async时要求是不能有返回值的不然会报错的 因为异步要求是不关心结果的
参考:
https://blog.csdn.net/qq_41192218/article/details/113353113


标签:

素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。