java - 在 RxJava 中 Observable 是否默认在计算线程上运行
问题描述
目前我正在学习RxJava
,只是陷入了一个基本的疑问。请参阅下面的代码。我没有使用任何subscribeOn()
. 下面的代码会在主线程还是计算线程上执行?
import io.reactivex.Observable;
import java.util.concurrent.TimeUnit;
public class Launcher {
public static void main(String[] args) {
Observable<Long> secondIntervals =
Observable.interval(1, TimeUnit.SECONDS);
secondIntervals.subscribe(s -> System.out.println(s));
/* Hold main thread for 5 seconds
so Observable above has chance to fire */
sleep(5000);
}
public static void sleep(long millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
解决方案
它将在计算线程上执行,请参阅您的main
方法的修改版本:
public static void main(String[] args) {
Observable<Long> secondIntervals =
Observable.interval(1, TimeUnit.SECONDS);
secondIntervals.subscribe(s -> System.out.println("Observable thread id: "
+ Thread.currentThread().getId()));
System.out.println("Main thread id: " + Thread.currentThread().getId());
/* Hold main thread for 5 seconds
so Observable above has chance to fire */
sleep(5000);
}
推荐阅读
- c# - 在下面使用 -i 和 -1 的目的是什么:array[name.Length - i] = name[i - 1];
- pandas - 通过比较两个 pandas 数据框创建一列
- r - 查找客户的新近度
- javascript - 使用简单的 for 循环有困难?
- windows - .bat 和 robocopy 出错 - 隐藏文件夹
- css - 在调试模式下加载浏览器扩展时未应用 CSS 样式(reactjs)
- azure - SQL Server 的 Azure ARM 模板不打印连接字符串
- javascript - 使用 node-csvtojson 的最后一个 json 数组条目的尾随逗号错误 - JSON 无效
- c++ - 未定义对“vtable for Vehicle”的引用——面向对象的编程练习
- html - 如何在 div 中水平居中 2 个按钮?