189 8069 5689

Springboot中,异步线程的执行顺序的控制-创新互联

1、顺序的定义

异步任务存在如下几种顺序:顺序的开启子任务(运行顺序和结束顺序不确定)。顺序的完成(就是A先启动,先执行完,再执行B任务,往往A、B之间存在某种依赖关系)。还有就是优先级的排序,就是A,B,C任务都在排队,来了个优先级更高的D任务,那么就在存在资源的时候,优先执行D任务。

专业领域包括成都做网站、成都网站制作、商城系统网站开发、微信营销、系统平台开发, 与其他网站设计及系统开发公司不同,成都创新互联的整合解决方案结合了帮做网络品牌建设经验和互联网整合营销的理念,并将策略和执行紧密结合,为客户提供全网互联网整合方案。2、异步的定义

笔者认为:异步最重要的就是主线程的运行进程不会因为子线程有没有做完而阻塞。简单的例子就是妈妈让孩子去米,妈妈发出买米这个命令之后就应该去做其他的了。而不应该等米下锅,妈妈在那里干等着。

映射到Springboot中,最主要的应该就是接口调用之后,不管异步任务是否完成,都应该返回结果给前端。

3、实现策略的尝试 3.1、把异步作为一般方法放到同一个异步方法中

针对:顺序的完成(就是A先启动,先执行完,再执行B任务,往往A、B之间存在某种依赖关系)。

这个实现非常简单,只需要调用一个异步任务,其他的调用顺序交给子任务就好。

例如让孩子去买米。妈妈只需要发出这个买米的信号。至于先去超市,再买米,再把米拿回来这三个任务就交给孩子控制就好。体现在代码里面就是在异步任务里面普通的方法调用。

3.2、使用线程池,定义优先级

针对:优先级的排序,就是A,B,C任务都在排队,来了个优先级更高的D任务,那么就在存在资源的时候,优先执行D任务。

这里可以才用线程池是实现,而不是注解。可以参考下面的链接。为ThreadPoolTaskExecutor使用PriorityBlockingQueue

https://blog.csdn.net/qq_38397501/article/details/125280650

4、针对Future的思考

实现链接请查考:https://javaforall.cn/157831.html

Future也是@Async返回值的一种,而且通过返回值我们可以判断该任务是否已经结束。如果我们有异步执行的任务A,B,C,我们可以通判断A任务是否执行完再执行B。这样也完成了顺序的控制。

问题是在哪里去判断呢? 如果在主线程中去判断,那么是不是就做成了等米下锅的事实。就是主任务需要等待异步任务是否完成,才能决定是否进行下一步。

那么我们能不能开个异步任务来执行这A,B,C三个任务呢,技术上是可行的。但是如果开了异步任务,考虑是否需要再使用Future,保证顺序,使用同步任务更好,那就作成3.1的做法。而且在异步任务里面再开线程或者异步任务,本身就是非常不可取的做法。因为会导致线程指数级增加,一旦并发过高,性能将快速下降。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网页标题:Springboot中,异步线程的执行顺序的控制-创新互联
网页路径:http://cdxtjz.cn/article/dpseep.html

其他资讯