multithreading - rxjava : Subscribe on the specific thread

标签 multithreading rx-java subscriber

我是 Rxjava 的新手。
我有以下代码:

    System.out.println("1: " + Thread.currentThread().getId());
    Observable.create(new rx.Observable.OnSubscribe<String>() {
        @Override
        public void call(Subscriber<? super String> subcriber) {
            System.out.println("2: " + Thread.currentThread().getId());
            // query database
            String result = ....
            subcriber.onNext(result);
        }

    }).subscribeOn(Schedulers.newThread()).subscribe(countResult -> {
        System.out.println("3: " + Thread.currentThread().getId());
    });

例如,输出将是:

1:50
2:100
3:100

我希望订阅者在 id 为 50 的线程上运行。我该怎么做?

最佳答案

我认为有两种情况。要么你需要它在 UI 线程上运行,要么因为同步。据我所知,您不能在特定线程上调用函数,因为调用该方法时,它会绑定(bind)到线程的上下文,因此不可能从一个线程调用一个方法到另一个线程。您的问题是订阅者中的方法是从 Schedulers.newThread() 调用的。 .我还发现了这个 github issue关于 Schedulers.currentThread() .您需要的是在调用观察者时通知调用者线程。
你也可以使用akka,用它编写并发代码更简单。
对不起我的语法不好。

关于multithreading - rxjava : Subscribe on the specific thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33561035/

相关文章:

Symfony getData 事件订阅者为 null

java - 如何使用信号量解决消费者/生产者任务

c# - 仅当值相同时才锁定?

java - 使用 RxJava 执行请求或订阅结果

java - Observable.from(需要在另一个线程上完成的事情)

快速组合 : Alternatives too eraseToAnySubscriber?

c# - UI 线程在文本框调用期间卡住

java - 使用线程时是否必须使用静态变量?

android - 取消订阅()之后的RXJava Single,没有调用doAfterTerminate()?

message-queue - 将 ROS 发布者或订阅者的队列大小设置为较大值的原因