@Async和@EnableAsync的用法

2023-11-14

我们在使用多线程的时候,往往需要创建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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@Async和@EnableAsync的用法 的相关文章

随机推荐