zoukankan      html  css  js  c++  java
  • Rxjava入门

    简介

    RxJava是一个开源的Rx框架ReactiveX的java版本。
    ReactiveX的主要目的是通过一系列Observable组合异步或事件代码。其中使用的是观察者模式。
    可以吧Reactive想象成不断向订阅者推送对象的机制,这个推送过程可以是同步的也可以是异步的。

    helloworld

    下面看一个简单的例子
    首先引入rxjava的依赖

    //gradle
    compile group: 'io.reactivex', name: 'rxjava', version: '1.2.1'
    
    @Test
    public void helloworld() {
        Observable obs=Observable.from(new String[]{"WORLD","WORLD2"});
        obs.subscribe(value-> System.out.println("Hello " + value + "!"));
    }
    -------输出------
    Hello WORLD!
    Hello WORLD2!
    

    首先创建了Observable对象,然后在上面订阅了一个subscriber输出observable的内容。

    创建Observale

    上面helloworld使用固定的值作为observable,可以使用Observable的create方法进行创建内容

    @Test
    public void create() {
        Observable.create(subscriber -> {
            IntStream.range(1, 5).forEach(i -> {
                if(!subscriber.isUnsubscribed()){
                    subscriber.onNext("hello" + i);
                }
            });
            if(!subscriber.isUnsubscribed()) {
                subscriber.onCompleted();
            }
        }).subscribe(System.out::println);
    }
    -------输出------
    hello1
    hello2
    hello3
    hello4
    

    上面的例子创建了4个(1-4)对象,Observable的create方法接受一个方法,在方法内部向subscriber推送信息。
    subsribler输出得到的值。
    上面的代码都是在主线程中运行的,如果想要不阻塞主线程可以在create中新建线程或使用线程池

    @Test
    public void asyn() throws InterruptedException {
        Observable.create(subscriber -> {
            new Thread(() -> {
                IntStream.range(1, 5).forEach(i -> {
                    if (!subscriber.isUnsubscribed()) {
                        subscriber.onNext("hello" + i);
                    }
                });
                if (!subscriber.isUnsubscribed()) {
                    subscriber.onCompleted();
                }
            }).start();
        }).subscribe(obj -> {
            System.out.println(obj);
            System.out.println(Thread.currentThread());
        });
        Thread.sleep(1000);
    }
    -------输出------
    hello1
    Thread[Thread-0,5,main]
    hello2
    Thread[Thread-0,5,main]
    hello3
    Thread[Thread-0,5,main]
    hello4
    Thread[Thread-0,5,main]
    

    Observable同时也提供了诸多如skip/take/map/zip等流式的转换操作。

  • 相关阅读:
    Linux帮助都有哪几种,如何使用?
    描述linux目录结构以及目录结构命名规定
    常见Linux的发行版有哪些?并描述不同发行版之间的联系与区别。
    【redis常用的键值操作及性能优化】
    【防护墙学习-1】
    【生成树中易混淆的概念及拓扑集】
    【linux运维递进】
    【windows中常用的服务概览和总结】
    【shell脚本学习-4】
    【shell脚本学习-3】
  • 原文地址:https://www.cnblogs.com/resentment/p/5987586.html
Copyright © 2011-2022 走看看