RxJava中AndroidSchedulers.mainThread()的替代方案是什么?

RxJava中AndroidSchedulers.mainThread()的替代方案是什么?,android,rx-java,rx-android,Android,Rx Java,Rx Android,RxJava中是否有与RxAndroid中的AndroidSchedulers.mainThread()同义的调度器api。 所以,如果我在一个新线程上安排一个任务,并且我想在Java主线程上观察它,我会怎么做呢 编辑 下面是一个RxSubscription示例,在注释system.in时,主线程被终止,而Observable.interval在单独的线程上运行。在Android中,我可以说observeOn(AndroidSchedulers.MainThread),此后的任何操作都将在主线程

RxJava中是否有与RxAndroid中的AndroidSchedulers.mainThread()同义的调度器api。 所以,如果我在一个新线程上安排一个任务,并且我想在Java主线程上观察它,我会怎么做呢

编辑 下面是一个RxSubscription示例,在注释system.in时,主线程被终止,而Observable.interval在单独的线程上运行。在Android中,我可以说observeOn(AndroidSchedulers.MainThread),此后的任何操作都将在主线程上运行。我正在寻找Java中类似的调度器,因为AndroidSchedulers是RxAndroid的一部分

import java.io.IOException;
import java.util.concurrent.TimeUnit;
import rx.Observable;

public class Main {

public static void main(String[] args) throws InterruptedException, IOException {

    Observable<Long> values = Observable.interval(1000, TimeUnit.MILLISECONDS);
    values.subscribe(
            v -> System.out.println("Received: " + v),
            e -> System.out.println("Error: " + e),
            () -> System.out.println("Completed")
    );
    //System.in.read();
}
}
import java.io.IOException;
导入java.util.concurrent.TimeUnit;
进口接收。可观察;
公共班机{
公共静态void main(字符串[]args)引发InterruptedException、IOException{
可观测值=可观测间隔(1000,时间单位毫秒);
值。订阅(
v->System.out.println(“接收:+v),
e->System.out.println(“错误:+e),
()->System.out.println(“已完成”)
);
//System.in.read();
}
}

是的,RxJava有调度器。要向任何线程发送消息,需要有某种消息循环等待来自其他线程的消息。在Android中,这是你的活套。在Java中,您需要自己完成这项工作。然后,您的调度程序将向该线程发送一条消息,并在该消息响应中执行该工作。其机制取决于您如何实现消息队列,但应该相当简单。

返回“主”Java线程目前是不可能的,因为RxJava 1.x没有阻塞调度程序

如果您可以升级到RxJava 2.x,我有一个特殊的调度程序,可以“固定”到当前线程:

compile "com.github.akarnokd:rxjava2-extensions:0.15.1"
阻止调度程序

这种类型的调度器在“当前线程”上运行其执行循环,更具体地说,是调用其execute()方法的线程。该方法将一直阻塞,直到调用shutdown()为止。这种类型的调度程序允许从其他线程返回“主”线程


我很想知道你为什么需要这个。因为只有一个主线程,所以没有太多的选择。为什么需要在特定线程上观察一些东西?在安卓系统中,主线程有着特殊的意义,你的要求是什么?@抗坏血酸编辑问题来阐述
public static void main(String[] args) {
    BlockingScheduler scheduler = new BlockingScheduler();

    scheduler.execute(() -> {
        Flowable.range(1, 10)
            .subscribeOn(Schedulers.io())
            .observeOn(scheduler)
            .doAfterTerminate(() -> scheduler.shutdown())
            .subscribe(v -> System.out.println(v + " on " + Thread.currentThread()));
    });

    System.out.println("BlockingScheduler finished");
}