Reactor3 源码解析七: FluxPublishOn源码剖析(2)

本文详细分析了一个Java命令执行过程,展示了FluxPeek操作如何在前16个元素使用main线程,而后续5个元素在parallel-1线程中处理。讨论了FluxPublishOn如何影响上下文切换、元素请求与消费的关系,以及为何只有一个线程在工作。文章解答了为何在消费12个元素后才拉取剩余5个元素,以及为何未显式调用emitter#complete可能导致的问题。
摘要由CSDN通过智能技术生成
			Flux.create(emitter -> {
				for (int i = 0; i <= 20; i++) {
					if (emitter.isCancelled()) {
						return;
					}
					System.out.println(Thread.currentThread().getName() + ":Source created " + i);
					emitter.next(i);
				}
			}).doOnNext(s -> {
				System.out.println(Thread.currentThread().getName() + ":Source pushed " + s);
			}).publishOn(Schedulers.parallel())
			.subscribe(custer -> {
				try {
					Thread.sleep(5000l);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				System.out.println(Thread.currentThread().getName() + ":consume " + custer);
			});
			Thread.sleep(360000l);

执行命令:  java -Dreactor.bufferSize.small=2 main

执行结果: 

main:Source created 0
main:Source pushed 0
main:Source created 1
main:Source pushed 1
main:Source created 2
main:Source pushed 2
main:Source created 3
main:Source pushed 3
main:Source created 4
main:Source pushed 4
main:Source created 5
main:Source pushed 5
main:Source created 6
main:Source pushed 6
main:Source created 7
main:Source pushed 7
main:Source created 8
main:Source pushed 8
main:Source created 9
main:Source pushed 9
main:Source created 10
main:Source pushed 10
main:Source created 11
main:Source pushed 11
main:Source created 12
main:Source pushed 12
main:Source created 13
main:Source pushed 13
main:Source created 14
main:Source pushed 14
main:Source created 15
main:Source pushed 15
main:Source created 16
main:Source created 17
main:Source created 18
main:Source created 19
main:Source created 20
parallel-1:consume 0
parallel-1:consume 1
parallel-1:consume 2
parallel-1:consume 3
parallel-1:consume 4
parallel-1:consume 5
parallel-1:consume 6
parallel-1:consume 7
parallel-1:consume 8
parallel-1:consume 9
parallel-1:consume 10
parallel-1:consume 11
parallel-1:Source pushed 16
parallel-1:Source pushed 17
parallel-1:Source pushed 18
parallel-1:Source pushed 19
parallel-1:Source pushed 20
paralle

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值