我一直在阅读RxJava中关于背压的一些文档,但是我没有找到像内部库中发生的详细说明。每个人都只是概括地说“生产者”太快而“消费者”太慢。
例如下面的代码:
Observable.interval(1, TimeUnit.MILLISECONDS)
.observeOn(Schedulers.newThread())
.subscribe(
i -> {
System.out.println(i);
try {
Thread.sleep(100);
} catch (Exception e) { }
},
System.out::println);
我一直在研究 RxJava 的源代码,我的理解是,在主线程中,我们每毫秒都会发出事件,一旦发出,我们将值传递给 System.out.println(i) 方法,并将其抛到 newThread 调度程序的线程池中并在可运行的方法内运行。
所以我的问题是,异常是如何在内部发生的?因为当我们调用 Thread.sleep() 时,我们只是让处理方法调用的线程 -> System.out.println() 进入睡眠状态,而不影响线程池中的其他线程,那么它怎么会引起异常呢?是因为线程池没有足够的可用线程了吗?
谢谢