Java | 一分钟掌握异步编程 | 7 - 其他异步方式

作者:Mars酱

声明:本文章由Mars酱编写,部分内容来源于网络,如有疑问请联系本人。

转载:欢迎转载,转载前先请联系我!

前言

实现异步方式还有很多,我认为Spring 的 @Async注解 和 ApplicationEvent 事件机制也是异步实现的一种可选方案。废话很多,上车再废话~

@Async注解

Spring的@Async注解一般我们这么写:

@Async
public void runTask(){
	// 业务处理
}

既然是异步,那么就会分两种,一种是无返回值,一种有返回值。如果是无返回值,就像上面那样写就ok,如果有返回值,一般这样写:

@Async
public Future<Object> notifyUserAndReturn() {
	// 业务处理
	return new AsyncResult<>(Object);
}

Future这个玩意还记得吗?就是 4 - Future异步 那篇的东西。不记得就点回去再回忆回忆。

ApplicationEvent事件

Spring里面还有个ApplicationEvent事件,可能用的人不太多,但是也是实现异步的一个方式。

首先,我们会先定义个监听,一般采用注解的方式:

@EventListener(Object.class)
public void run(Object event) {
    // 你的业务
}

添加一个@EventListener注解,表示这个类的函数数据监听,如果有地方触发了时间,这个run函数就会被运行。监听的地方不要写Object,应该是定义个事件的实体对象,比如:UserInfo。

事件触发的地方,一般这么写:

SpringContextHolder.publishEvent(Object);

通过SpringContextHolder对象,发送事件广播。注意:不要写Object对象,应该发送的是具体事件的实体对象,比如:UserInfo

最后结束

总算爽完了~,来总结一下:

实现异步的方式有很多,可以使用JDK原生的,也可以使用消息中间件的,还能使用开源框架的,具体看你的需求了,如果你单体架构,也不关心返回值,那么直接线程异步吧。如果任务之间的依赖多,改变多,那可以选择JDK的Future、CompletableFuture。如果你是互联网架构,高并发、高可用、高性能是你们家常便饭,那么你干脆独立搭建一套完整的mq消息队列服务,业务组相互生产或消费topic,中间异步的事情交给专业的消息队列服务,而且性能和稳定性也有保障。

回到初衷,为什么要用异步?

目的就是为了减轻当前线程的压力。如果当前线程被耗时的任务、琐碎且不重要的任务浪费资源,那就可以考虑使用异步来解决。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值