需求:
有多个任务在不同的线程中执行,要求在所以线程任务执行完毕之后。
给出一个结果回调,再继续其他业务!
方案:
1、使用CountDownLatch
2、使用Rxjava的zip操作符
private void testRxjavaZip(){
// 创建 多个observable
List<String> sList = new ArrayList<>();
sList.add("11");
sList.add("222");
sList.add("3333");
sList.add("44444");
sList.add("555555");
List<Observable<String>> obs = new ArrayList<>();
Log.d("fmm","开始时间:"+System.currentTimeMillis());
for (int i = 0; i < sList.size(); i++) {
int finalI = i;
obs.add(Observable.fromCallable(new Callable<String>() {
@Override
public String call() throws Exception {
Thread.sleep(2000);
return finalI +" asda";
}
}).subscribeOn(Schedulers.newThread()));
}
// 通过 Zip 获得最长执行时间
Observable.zip(obs, new Function<Object[], Object>() {
@Override
public Object apply(Object[] objects) throws Exception {
// 获取各个Observable执行的结果
Log.d("fmm","结束时间:"+System.currentTimeMillis());
Log.d("fmm","objects "+ objects.length);
return "zip end!";
}
}).subscribe(new Consumer<Object>() {
@Override
public void accept(Object o) throws Exception {
// 获得zip的执行结果
Log.d("fmm","subscribe时间:"+System.currentTimeMillis());
Log.d("fmm","objects ");
}
});
}