RxJAVA--Observable入门(一)

import rx.Observable;
import rx.Observer;
import rx.schedulers.Schedulers;

import java.util.concurrent.Semaphore;

public class ObservableTest {
    public static void main(String[] args) throws InterruptedException {

        Observable<Object> observable = Observable.unsafeCreate(i -> {
            i.onNext(1);
            i.onNext(2);
            i.onNext(3);
            System.out.println("我是被观察者"+Thread.currentThread().getName());
           // i.onCompleted();//被观察者complete后,仍然发送数据。观察者不接受数据
            i.onNext(4);//观察者不接收该数据
            System.out.println("=======");
        });

        observable.subscribeOn(Schedulers.newThread()) //被观察者在新的线程(创建多个 只有第一个有效)
                .observeOn(Schedulers.newThread()) //观察者在新的线程观察 (可创建多个线程)
                .subscribe(getObserver()); //绑定观察与被观察者
        new Semaphore(-1).acquire();
    }

    public static Observer<Object> getObserver(){
        Observer<Object> o=  new Observer<Object>() {
            @Override
            public void onCompleted() {
            }

            @Override
            public void onError(Throwable throwable) {
            }
            @Override
            public void onNext(Object o) {
                while (1==(int)o){
                    try {
                        Thread.sleep(1000);
                        break;
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                System.out.println("我是观察者线程:"+Thread.currentThread().getName()+"值是:"+ o);
            }
        };
        return o;
    }
}

结果:

我是被观察者RxNewThreadScheduler-2              被观察在新的线程    
=======                                        complete后让发送消息
我是观察者线程:RxNewThreadScheduler-1值是:1      观察者在新的线程(不阻塞主线程) 
我是观察者线程:RxNewThreadScheduler-1值是:2     
我是观察者线程:RxNewThreadScheduler-1值是:3      complete后不打印4

参考:https://www.jianshu.com/p/8818b98c44e2

猜你喜欢

转载自blog.csdn.net/jaycegg/article/details/80904785