springBoot接口排队(串行执行)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springBoot接口排队(串行执行)相关的知识,希望对你有一定的参考价值。

参考技术A 在调用接口时将线程号(多实例的情况下得用uuid,线程号可能会重复)存入redis队列,查询队首线程号(uuid)如果是当前线程,则执行逻辑、出队,否则等待。

后调用的接口后执行了,如果不加该注解的情况如下,执行快的先执行完:

假如不考虑多租户和多实例的情况,就有很多种实现方式

输出如下

实现如下:

输出如下:

实现方式和使用ConcurrentLinkedQueue方式一样,BlockingQueue关键在于 take 方法,当队列为空时,take会阻塞,适合实现生产者消费者模式。
看一下take的源码,当队列为空,调用的是await,当队列不为空时,出队,再判断队列还不为空,唤醒其他take的线程

再看一下offer的源码,当队列不为空,唤醒take的线程

以上是关于springBoot接口排队(串行执行)的主要内容,如果未能解决你的问题,请参考以下文章

springboot 中的commandLineRunners接口

spring定时器任务多任务串行执行问题排查

并行的执行效率一定高于串行吗?(多线程的执行效率一定高于单线程吗?)

Go语言并发编程

Go语言并发编程

Promise 实现方法(请求)的异步(串行)执行