我是 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/