一、前言 最近在看springcloud的熔断机制的实现,发现底层使用的rxjava实现,就看了下rxjava的使用,发现rxjava使用可也便捷实现前面讲解的定时生产与消费。
二、rxjava版生产消费实现 在简单抽象下要实现的功能,定时器线程间隔3秒生成一个任务,假如任务里面有3个子任务,则消费线程要分3秒,每秒消费一个子任务。
文章图片
image.png
- prouducerTimer是一个定时器做生产者使用,间隔3s调用一次run方法
- 代码(1)创建一个任务
- 代码(2)创建一个观察者对象,Observable.interval方法间隔1秒发射出一个对象,比如第一秒发射出0,第二秒发射出1....。但是我们要模拟是只需要3s的情况,所以使用take方法只获取Observable.interval观察者对象里面的TAG_QUEUE_SIZE=3个元素。这里保证了生成的观察这对象只会发射出3个元素,并且是间隔1s发出。但是这时候发射出的是0,1,2而不是代码(1)生成的任务。所以使用flatMap方法对元素进行转换,转换为代码(1)生成的元素。
- 代码(3)创建一个观察者并订阅观察者对象。
文章图片
可知同一个元素在连续的3s内被消费了。
三、总结 rxjava的功能挺强大的,合理的排列他提供的功能可以大大简化我们的开发成本。
【并发|基于rxjava的生产消费模型】 欢迎关注微信公众号:‘技术原始积累’ 获取更多技术干货__
文章图片
推荐阅读
- 主题(java服务,cpu高,内存高,telnet不通排查及分析)
- 并发|11.防刷限流
- 并发编程|tomcat对AQS的扩展(使用LimitLatch控制连接数)
- java|java并发编程(顺序输出A、B、C循环10次)
- 两个线程交替打印奇偶
- Java|LeetCode-1114. 按序打印(多线程)
- Java|LeetCode-1117. H2O 生成(多线程)
- Java|LeetCode-1116.打印零与奇偶数(多线程)
- JAVA8|Java8对于多线程并发的一些新支持-LongAdder
- 如何实现某个线程在其他线程执行完毕之后再执行?