Rxjava并发任务


package com.g.app.android2;



import io.reactivex.rxjava3.core.Observable;
import io.reactivex.rxjava3.core.ObservableSource;
import io.reactivex.rxjava3.core.Scheduler;
import io.reactivex.rxjava3.functions.Action;
import io.reactivex.rxjava3.functions.Consumer;
import io.reactivex.rxjava3.functions.Function;
import io.reactivex.rxjava3.schedulers.Schedulers;


import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class TestMain {
    public static void main(String argv[]) throws InterruptedException {
        String TAG = "";
        int threadNum = Runtime.getRuntime().availableProcessors() + 1;

        final ExecutorService executorService = Executors.newFixedThreadPool(5);//5个线程并发执行任务

        final Scheduler scheduler = Schedulers.from(executorService);

        final long startTime = System.currentTimeMillis();
        Observable.range(1, 20)
                .flatMap(new Function<Integer, ObservableSource<String>>() {
                    @Override
                    public ObservableSource<String> apply(Integer integer) throws Exception {
                        return Observable.just(integer)
                                .subscribeOn(scheduler)// shcedulers.
                                .map(new Function<Integer, String>() {
                                    @Override
                                    public String apply(Integer integer) throws Exception {
                                        Thread.sleep(integer * 1000); // do something.
                                        Log.d("", Thread.currentThread().getName());
                                        return integer.toString();
                                    }
                                });
                    }
                })
                .doFinally(() -> {
                    Log.d(TAG, "Finally.");
                    executorService.shutdown();
                })
                .subscribe(s -> {// output. 用subject转换
                    long time = (System.currentTimeMillis()-startTime)/1000;
                    Log.d(TAG, "Next: " + s +  ", timeNow = " + time);
                }, throwable -> Log.d(TAG, "Error."), () -> Log.d(TAG, "Complete."));

    }

    private static class Log {
        public static void d(String tag, String msg) {
            System.out.println(tag + ", " + msg);
        }
    }


    // "America/Los_Angeles" UTC-8
    public static void getTimeZoneTimeNow(String timeZoneId) {

    }
}
E  application registeration exception
                                       java.lang.InterruptedException
                                       	at java.lang.Object.wait(Native Method)
                                       	at java.lang.Object.wait(Object.java:442)
                                       	at android.bluetooth.le.BluetoothLeScanner$BleScanCallbackWrapper.startRegistration(BluetoothLeScanner.java:439)
                                       	at android.bluetooth.le.BluetoothLeScanner.startScan(BluetoothLeScanner.java:290)
                                       	at android.bluetooth.le.BluetoothLeScanner.startScan(BluetoothLeScanner.java:155)
                                       	at com.tplink.libtapoiotble.ble.blescan.IoTBLEScanClient.realScanBLEDevice(IoTBLEScanClient.java:266)
                                       	at com.tplink.libtapoiotble.ble.blescan.IoTBLEScanClient.lambda$scheduleBLEScanTask$2$IoTBLEScanClient(IoTBLEScanClient.java:95)
                                       	at com.tplink.libtapoiotble.ble.blescan.-$$Lambda$IoTBLEScanClient$iNbPuhbcnVapdpdoQ_AMnPaUzSw.accept(Unknown Source:4)
                                       	at io.reactivex.internal.observers.DisposableLambdaObserver.onSubscribe(DisposableLambdaObserver.java:42)
                                       	at io.reactivex.internal.operators.observable.ObservableTake$TakeObserver.onSubscribe(ObservableTake.java:55)
                                       	at io.reactivex.internal.operators.observable.ObservableInterval.subscribeActual(ObservableInterval.java:41)
                                       	at io.reactivex.Observable.subscribe(Observable.java:12284)
                                       	at io.reactivex.internal.operators.observable.ObservableTake.subscribeActual(ObservableTake.java:30)
                                       	at io.reactivex.Observable.subscribe(Observable.java:12284)
                                       	at io.reactivex.internal.operators.observable.ObservableDoOnLifecycle.subscribeActual(ObservableDoOnLifecycle.java:33)
                                       	at io.reactivex.Observable.subscribe(Observable.java:12284)
                                       	at io.reactivex.Observable.subscribe(Observable.java:12270)
                                       	at io.reactivex.Observable.subscribe(Observable.java:12229)
                                       	at com.tplink.libtapoiotble.ble.blescan.IoTBLEScanClient.scheduleBLEScanTask(IoTBLEScanClient.java:97)
                                       	at com.tplink.libtapoiotble.ble.blescan.IoTBLEScanClient.lambda$startBLEScan$0$IoTBLEScanClient(IoTBLEScanClient.java:76)
                                       	at com.tplink.libtapoiotble.ble.blescan.-$$Lambda$IoTBLEScanClient$GrSe3KxKh99r2P7VByw9BweU_So.apply(Unknown Source:4)
                                       	at io.reactivex.internal.operators.observable.ObservableScalarXMap$ScalarXMapObservable.subscribeActual(ObservableScalarXMap.java:142)
                                       	at io.reactivex.Observable.subscribe(Observable.java:12284)
                                       	at io.reactivex.internal.operators.observable.ObservableOnErrorReturn.subscribeActual(ObservableOnErrorReturn.java:31)
                                       	at io.reactivex.Observable.subscribe(Observable.java:12284)
                                       	at io.reactivex.internal.operators.observable.ObservableDoFinally.subscribeActual(ObservableDoFinally.java:43)
                                       	at io.reactivex.Observable.subscribe(Observable.java:12284)
                                       	at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)
                                       	at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:608)
                                       	at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
                                       	at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
                                       	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                                       	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
                                       	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
                                       	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
                                       	at java.lang.Thread.run(Thread.java:920)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值