[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,但是没成功过。
...全文
1038 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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
  • 打赏
  • 举报
回复
自己再顶一下

80,472

社区成员

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

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