package com.test.rxjava;

import java.time.Duration;
import java.time.Instant;
import java.util.LinkedList;
import java.util.concurrent.CountDownLatch; import org.apache.commons.lang3.time.DurationFormatUtils; import io.reactivex.Flowable;
import io.reactivex.Observable;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.schedulers.Schedulers; public class ObservableTest { public static void main(String[] args) {
ObservableTest test = new ObservableTest();
CountDownLatch latch = new CountDownLatch(1);
test.run();
try {
latch.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void run() {
LinkedList<Integer> aList = new LinkedList<Integer>();
for (int i = 0; i < 10000000; i++) {
aList.add(i);
}
Instant start = Instant.now();
Observable
//Flowable
//.fromIterable(aList)
.create((ObservableOnSubscribe<Integer>) observableEmitter -> {
//observableEmitter: 发射器
Integer i = 0;
while ( true){
i++;
System.out.println(i);
observableEmitter.onNext(i);
}
})
.observeOn(Schedulers.io())
.subscribeOn(Schedulers.newThread())
//.filter(i -> i%2==0)
.subscribe(this::next, throwable -> throwable.printStackTrace(),()-> System.out.println(DurationFormatUtils.formatDurationWords(Duration.between(start, Instant.now()).toMillis(), true, true)));
}
private void next(Integer i) {
try {
Thread.sleep(100000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
package com.test.rxjava;

import java.time.Duration;
import java.time.Instant;
import java.util.Iterator;
import java.util.concurrent.CountDownLatch; import org.apache.commons.lang3.time.DurationFormatUtils; import io.reactivex.Flowable;
import io.reactivex.Observable;
import io.reactivex.schedulers.Schedulers; public class ObservableTest implements Iterable<Integer> { private Integer begin;
private Integer end; private ObservableTest(Integer begin, Integer end) {
this.begin = begin;
this.end = end;
} public static void main(String[] args) {
ObservableTest test = new ObservableTest(0, 1_000_000);
CountDownLatch latch = new CountDownLatch(1);
test.run(test, latch);
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
} private void run(ObservableTest test, CountDownLatch latch) {
Instant start = Instant.now();
//Observable
Flowable
.fromIterable(test).observeOn(Schedulers.io()).subscribeOn(Schedulers.newThread())
.subscribe(this::handleNext, e -> {
e.printStackTrace();
latch.countDown();
}, () -> {
System.out.println(DurationFormatUtils
.formatDurationWords(Duration.between(start, Instant.now()).toMillis(), true, true));
latch.countDown();
});
} private void handleNext(Integer i) {
System.out.println("consumer: "+Thread.currentThread().getName() + ":" + i);
} public Iterator<Integer> iterator() {
return new Itr(begin, end);
} private class Itr implements Iterator<Integer> {
private Integer begin;
private Integer end; private Itr(Integer begin, Integer end) {
this.begin = begin;
this.end = end;
} @Override
public boolean hasNext() {
return begin < end;
} @Override
public Integer next() {
begin++;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("producer: "+Thread.currentThread().getName() + ":" + begin);
return begin;
}
}
}
package com.test.rxjava;

import java.time.Duration;
import java.time.Instant;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CountDownLatch; import org.apache.commons.lang3.time.DurationFormatUtils; import io.reactivex.Observable;
import io.reactivex.schedulers.Schedulers; public class ObservableTest implements Iterable<Integer> { private Integer begin;
private Integer end; private ObservableTest(Integer begin, Integer end) {
this.begin = begin;
this.end = end;
} public static void main(String[] args) {
ObservableTest test = new ObservableTest(0, 100_000_000);
CountDownLatch latch = new CountDownLatch(1);
test.run(test, latch);
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
} private void run(ObservableTest test, CountDownLatch latch) {
Instant start = Instant.now();
Observable
.fromIterable(test)
.observeOn(Schedulers.io())
.subscribeOn(Schedulers.newThread())
.filter(i -> i%2==0)
.buffer(1000)
.subscribe(this::handleNext, e -> {
e.printStackTrace();
latch.countDown();
}, () -> {
System.out.println("Observable:" + DurationFormatUtils
.formatDurationWords(Duration.between(start, Instant.now()).toMillis(), true, true));
latch.countDown();
});
} private void handleNext(List<Integer> i) {
System.out.println("consumer: "+Thread.currentThread().getName() + ":" + i.get(i.size()-1));
} public Iterator<Integer> iterator() {
return new Itr(begin, end);
} private class Itr implements Iterator<Integer> {
private Integer begin;
private Integer end; private Itr(Integer begin, Integer end) {
this.begin = begin;
this.end = end;
} @Override
public boolean hasNext() {
return begin < end;
} @Override
public Integer next() {
begin++;
//System.out.println("producer: "+Thread.currentThread().getName() + ":" + begin);
return begin;
}
}
}
package com.test.rxjava;

import java.time.Duration;
import java.time.Instant;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CountDownLatch; import org.apache.commons.lang3.time.DurationFormatUtils; import io.reactivex.Flowable;
import io.reactivex.schedulers.Schedulers; public class FlowableTest implements Iterable<Integer> { private Integer begin;
private Integer end; private FlowableTest(Integer begin, Integer end) {
this.begin = begin;
this.end = end;
} public static void main(String[] args) {
FlowableTest test = new FlowableTest(0, 100_000_000);
CountDownLatch latch = new CountDownLatch(1);
test.run(test, latch);
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
} private void run(FlowableTest test, CountDownLatch latch) {
Instant start = Instant.now();
Flowable
.fromIterable(test)
.observeOn(Schedulers.io())
.subscribeOn(Schedulers.newThread())
.filter(i -> i%2==0)
.buffer(1000)
.subscribe(this::handleNext, e -> {
e.printStackTrace();
latch.countDown();
}, () -> {
System.out.println("Flowable:" + DurationFormatUtils
.formatDurationWords(Duration.between(start, Instant.now()).toMillis(), true, true));
latch.countDown();
});
} private void handleNext(List<Integer> i) {
System.out.println("consumer: "+Thread.currentThread().getName() + ":" + i.get(i.size()-1));
} public Iterator<Integer> iterator() {
return new Itr(begin, end);
} private class Itr implements Iterator<Integer> {
private Integer begin;
private Integer end; private Itr(Integer begin, Integer end) {
this.begin = begin;
this.end = end;
} @Override
public boolean hasNext() {
return begin < end;
} @Override
public Integer next() {
begin++;
//System.out.println("producer: "+Thread.currentThread().getName() + ":" + begin);
return begin;
}
}
}

去掉

.subscribeOn(Schedulers.newThread())

Observable Flowable Test的更多相关文章

  1. Retrofit 简介 wiki 文档

    简介 Type-safe HTTP client for Android and Java by Square, Inc. GitHub主页:https://github.com/square/ret ...

  2. 实战SpringCloud响应式微服务系列教程(第三章)

    接着之前的: 实战SpringCloud响应式微服务系列教程(第一章) 实战SpringCloud响应式微服务系列教程(第二章) 1.1.3Reactor框架 响应式编程是一种编程模型,本节将介绍这种 ...

  3. Rxjava2 介绍与详解实例

    目录 前言 RX介绍 Rx模式 Rx使用依赖: Rxjava的入门基础 1. Observable 2. Flowable 3. Single 4. Completable 5. Maybe 6. S ...

  4. Android RxJava 2 的用法 just 、from、map、subscribe、flatmap、Flowable、Function、Consumer ...【转】

    先简单说说RxJava的用途与价值 原文出处:Android RxJava 2 的用法 用途: 异步 (也就是开线程跳转) 价值: 面对复杂的逻辑,它依然 简洁 ,代码 易读 RxJava2 与 Rx ...

  5. angular2系列教程(八)In-memory web api、HTTP服务、依赖注入、Observable

    大家好,今天我们要讲是angular2的http功能模块,这个功能模块的代码不在angular2里面,需要我们另外引入: index.html <script src="lib/htt ...

  6. Angular2学习笔记——Observable

    Reactive Extensions for Javascript 诞生于几年前,随着angular2正式版的发布,它将会被更多开发者所认知.RxJs提供的核心是Observable对象,它是一个使 ...

  7. Rxjava cold/hot Observable

    create Observable分为cold以及hot两种,cold主要是静态的,每次subscribe都是从头开始互不干扰,而hot的在同一时刻获得的值是一致的 cold Observable 使 ...

  8. 设计模式--观察者模式初探和java Observable模式

    初步认识观察者模式 观察者模式又称为发布/订阅(Publish/Subscribe)模式,因此我们可以用报纸期刊的订阅来形象的说明: 报社方负责出版报纸. 你订阅了该报社的报纸,那么只要报社发布了新报 ...

  9. 观察者模式(Observer和Observable实现)

    package com.wzy.java8.thread; import java.util.Observable; import java.util.Observer; public class D ...

随机推荐

  1. JS中的!= 、== 、!==、===的用法和区别

    与c++中每一种类型都有明确的的定义不同:因JS中var定义存在,未具体区分类型,!=与==不能包含所有的条件,故加入!==与===用法: var num = 1; var str = '1'; va ...

  2. c语言学习笔记-变量、变量的命名、变量的赋值和变量的初始化

    在学习了简单的输入输出功能和了解了一些基本的运算符号之后我们可以试着做一个非常简单的计算器. 比如说想计算23+65 输入以下代码就可以了. printf("23+65=%d",2 ...

  3. 算法Sedgewick第四版-第1章基础-011一用链表实现bag、queue、stack

    1. package algorithms.ADT; /************************************************************************ ...

  4. JavaPersistenceWithHibernate第二版笔记-第六章-Mapping inheritance-007Inheritance of embeddable classes(@MappedSuperclass、@Embeddable、@AttributeOverrides、、)

    一.结构 二.代码 1. package org.jpwh.model.inheritance.embeddable; import javax.persistence.MappedSuperclas ...

  5. HTML5应用程序缓存Application Cache.RP

    什么是Application Cache HTML5引入了应用程序缓存技术,意味着web应用可进行缓存,并在没有网络的情况下使用,通过创建cache manifest文件,可以轻松的创建离线应用. A ...

  6. 数据结构 hbb(汉堡包)

    数据结构 hbb(汉堡包) 问题描述 汉堡包有收集汉犇犇的癖好,它喜欢把汉犇犇一个叠一个的放置. 因为它有强迫症,所以每当它想放一个新的汉犇犇进去的时候并不一定想直接叠在最上面,简单的说,当他想放第 ...

  7. js/jq基础(日常整理记录)-3-一个自定义表格

    一.一个自定义的表格 这个js是我刚工作的时候,我们老大让我做一个功能,我觉得html自带的table功能单一,没有分页和排序功能,所有就尝试着做一下,所以这个东西就出来了.很久没写博客了,贴出来吧, ...

  8. ipa包使用命令上传fir.im或者蒲公英

    我们的工程做了自动打包处理,但是每次打完ipa后只是放置于一个共享盘或者本地,为了方便测试,每次都要手动上传上传fir或者蒲公英,比较麻烦.所以研究了一下怎么能在打完包后直接脚本上传到上传fir或者蒲 ...

  9. css 隐藏html元素的方法

    1.常见方法 display:none 这个方法的问题是 元素被隐藏了 同时该元素不占位置了,应该也可以说该元素没有高度和宽度了 2.常见方法 visibility: hidden; 这个方法和dis ...

  10. 【C#】 WebApi 路由机制剖析

    C#进阶系列——WebApi 路由机制剖析:你准备好了吗? 转自:https://blog.csdn.net/wulex/article/details/71601478 2017年05月11日 10 ...