一滓彰、前言
最近在看springcloud的熔斷機制的實現怕享,發(fā)現底層使用的rxjava實現,就看了下rxjava的使用绽昼,發(fā)現rxjava使用可也便捷實現前面講解的定時生產與消費周偎。
二抹剩、rxjava版生產消費實現
在簡單抽象下要實現的功能,定時器線程間隔3秒生成一個任務蓉坎,假如任務里面有3個子任務澳眷,則消費線程要分3秒,每秒消費一個子任務蛉艾。
- prouducerTimer是一個定時器做生產者使用钳踊,間隔3s調用一次run方法
- 代碼(1)創(chuàng)建一個任務
- 代碼(2)創(chuàng)建一個觀察者對象衷敌,Observable.interval方法間隔1秒發(fā)射出一個對象,比如第一秒發(fā)射出0拓瞪,第二秒發(fā)射出1....缴罗。但是我們要模擬是只需要3s的情況,所以使用take方法只獲取Observable.interval觀察者對象里面的TAG_QUEUE_SIZE=3個元素祭埂。這里保證了生成的觀察這對象只會發(fā)射出3個元素面氓,并且是間隔1s發(fā)出。但是這時候發(fā)射出的是0蛆橡,1舌界,2而不是代碼(1)生成的任務。所以使用flatMap方法對元素進行轉換泰演,轉換為代碼(1)生成的元素呻拌。
- 代碼(3)創(chuàng)建一個觀察者并訂閱觀察者對象。
運行代碼輸出如下:
可知同一個元素在連續(xù)的3s內被消費了睦焕。
三藐握、總結
rxjava的功能挺強大的,合理的排列他提供的功能可以大大簡化我們的開發(fā)成本垃喊。
作者:加多