[200分贴]RxJava怎么实现多个线程同时执行,怎么实现retryWhen

wei220000 2016-03-13 05:17:38
Observable.from(list).map(new Func1<Judge, Bitmap>() {
@Override
public Bitmap call(Judge judge) {
Bitmap screen=ScreenService.getInstance().getBitmapNoH();
w[0] =screen.getWidth();
h[0] =screen.getHeight();
return screen;
}
}).subscribeOn(Schedulers.newThread()).subscribe(new Action1<Point>() {
@Override
public void call(Point point) {
SomeThing();
}
});
list一共有8个,通过log来看,是按顺序一个一个执行的。怎么才能建立8个线程同时执行呢?用new Thread到是可以实现。
Observable.create(subscriber -> {
if (a)
subscriber.onError(new Throwable("错了"));
else subscriber.onNext(t);
}).retryWhen(observable -> Observable.timer(500,TimeUnit.MILLISECONDS)).subscribe(o -> {
someThing(o);
}, throwable -> {
Log.e("tag",throwable.getMessage());
});
按照文档这样写retryWhen,但是没成功过。
...全文
1166 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
苇渡lrm 2016-05-12
  • 打赏
  • 举报
回复
用Observable.merge方法
sxdwzx520 2016-04-27
  • 打赏
  • 举报
回复
试试这个方法,
private void fun7(){
		Integer[] st=new Integer[]{1,2,3,4,5,6,7,8};
		Observable.from(st)
		.subscribeOn(Schedulers.newThread())
		.observeOn(Schedulers.newThread())
		.flatMap(new Func1<Integer, Observable<String>>() {

			@Override
			public Observable<String> call(Integer st) {
				
				return Observable.just(st)
						.observeOn(Schedulers.newThread())//重新开启新线程
						.map(new Func1<Integer,String>() {

							@Override
							public String call(Integer st) {
								//进行数据处理
								
								String s="";
								try {
									Thread.sleep(1200);
									s=st+"@";
								} catch (InterruptedException e) {
									e.printStackTrace();
								}
								return s;
							}

						});
						
			}

		})
		.subscribe(new Action1<String>() {

			@Override
			public void call(final String st) {
				Log.e("fun7", st+",time:"+System.currentTimeMillis());
			}
		});
	}
执行结果: 04-27 08:36:04.826: E/fun7(16325): 1@,time:1461746164720 04-27 08:36:04.826: E/fun7(16325): 2@,time:1461746164831 04-27 08:36:04.826: E/fun7(16325): 3@,time:1461746164831 04-27 08:36:04.826: E/fun7(16325): 4@,time:1461746164832 04-27 08:36:04.826: E/fun7(16325): 6@,time:1461746164832 04-27 08:36:04.826: E/fun7(16325): 7@,time:1461746164832 04-27 08:36:04.830: E/fun7(16325): 8@,time:1461746164834 04-27 08:36:04.830: E/fun7(16325): 5@,time:1461746164834 可以看到已经并发执行了
  • 打赏
  • 举报
回复
用循环可以,坐等RxJava大牛解答

	ArrayList<String> list = new ArrayList<String>();
		list.add("a");
		list.add("b");
		list.add("c");
		list.add("d");
		for (String str : list) {
			Observable.just(str).subscribeOn(
					Schedulers.newThread()).subscribe(new Action1<String>() {

						@Override
						public void call(String arg0) {
							while (true)
								Log.e("error", arg0);
						}
					});
		}
wei220000 2016-03-15
  • 打赏
  • 举报
回复
flatmap只是转换observable用的,Schedulers.computation()也只是指定用哪个线程来执行,不能并发,依然是顺序执行。
Mr键 2016-03-15
  • 打赏
  • 举报
回复
建议使用操作符:FlatMap,执行线程使用Schedulers.computation()。 可以看看文档
哎,真难 2016-03-15
  • 打赏
  • 举报
回复
666,不过没用过,相关线程池的api没有吗
wei220000 2016-03-15
  • 打赏
  • 举报
回复
无耻的再顶一下
wei220000 2016-03-15
  • 打赏
  • 举报
回复
还是希望能直接在observable中实现
sagittarius1988 2016-03-14
  • 打赏
  • 举报
回复
RxJava还真没接触过,帮你顶下
画虎烂 2016-03-14
  • 打赏
  • 举报
回复
不懂,关注一下
wei220000 2016-03-14
  • 打赏
  • 举报
回复
加分到200了,求版主关注一下。
wei220000 2016-03-14
  • 打赏
  • 举报
回复
自己再顶一下
内容概要:本文系统研究了在电力系统负荷发生突变的动态环境下,采用无迹卡尔曼滤波(UKF)与自适应无迹卡尔曼滤波(AUKF)进行三相状态估计的方法。通过Matlab平台实现了两种滤波算法的仿真模型,构建了包含三相电力系统建模、非线性状态方程推导、量测系统设计在内的完整状态估计框架。重点对比分析了UKF与AUKF在突变负荷扰动下的估计精度、收敛速度与鲁棒性,深入探讨AUKF通过实时调整噪声协方差实现自适应的能力,从而有效应对系统模型不确定性和外部动态变化,提升状态估计的可靠性。研究为智能电网在复杂动态工况下的实时监控、安全评估与优化控制提供了坚实的算法基础与仿真验证手段。; 适合人群:具备电力系统分析、现代控制理论基础及一定Matlab编程能力的研究生、科研人员和工程技术人员。; 使用场景及目标:① 掌握UKF在非线性电力系统状态估计中的具体应用流程与实现细节;② 深入理解AUKF的自适应机制及其在负荷突变、模型失配等动态工况下提升估计性能的原理与优势;③ 为智能电网的状态监测、故障诊断、实时调度与主动防御等高级应用提供可靠的算法支持与可复现的仿真平台。; 阅读建议:建议读者结合电力系统状态估计的经典理论,仔细研读并运行所提供的Matlab代码,重点关注系统模型的建立、UKF/AUKF算法的参数初始化、负荷突变事件的建模方式,以及两种算法在电压、电流等状态变量估计误差上的对比分析,通过仿真结果的可视化深入理解算法差异与工程应用价值。

80,488

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧