Rx java 如何在RxJava中取消订阅时销毁Observable?
我有以下课程:Rx java 如何在RxJava中取消订阅时销毁Observable?,rx-java,reactive-programming,rx-java2,Rx Java,Reactive Programming,Rx Java2,我有以下课程: public class Service { private Observable<Long> obs = Observable.interval(0, 10, TimeUnit.SECONDS); private Single<Foo> sendFooRequest() { return Single.fromCallable(() -> sendHttpRequest()); } public
public class Service {
private Observable<Long> obs = Observable.interval(0, 10, TimeUnit.SECONDS);
private Single<Foo> sendFooRequest() {
return Single.fromCallable(() -> sendHttpRequest());
}
public Flowable<Foo> getFlowable() {
return obs
.toFlowable(BackpressureStrategy.BUFFER)
.doOnNext(tick -> log.info("tick: {}", tick))
.flatMapSingle(tick -> sendFooRequest())
.distinctUntilChanged();
}
}
输出如下所示:
17:33:58.826 INFO 11813 --- [nio-6969-exec-3] ...Service : tick: 0
17:34:01.162 INFO 11813 --- [ionThreadPool-2] ...Service : tick: 19
17:34:02.918 INFO 11813 --- [ionThreadPool-1] ...Service : tick: 94
17:34:03.827 INFO 11813 --- [ionThreadPool-3] ...Service : tick: 1
17:34:06.162 INFO 11813 --- [ionThreadPool-2] ...Service : tick: 20
17:34:07.919 INFO 11813 --- [ionThreadPool-1] ...Service : tick: 95
因此,看起来即使只有一个活动订阅者,应用程序仍然使用3个线程(并处理3个可观察对象),并且应用程序只创建一个服务的实例
如何在取消订阅
事件中销毁可观察对象?上次订阅完成后,可观察对象将被正确清理。你提供的信息似乎没有什么问题
每次调用getFlowable()
,都会创建一个新的观察者链。Observable.interval()
操作符使用Schedulers.computation()
executor获取一个新线程来运行
不清楚你想发生什么。您想让可观察对象在同一线程上运行吗?您希望只使用一小部分线程吗?由于前两个客户端已断开连接,我希望相应的观察者链(ionThreadPool-1、ionThreadPool-2)消失。就像当第三个客户端订阅时,出于某种原因,我可以看到来自所有3个观察者链的滴答声。wdym by last subscription:一旦最后一个订阅完成,观察者将被正确清理。如果存在:订阅服务器1->connect->disconnect,订阅服务器2->connect->disconnect,#订阅服务器3->connect(因此它仍然处于活动状态),它是否算作未完成的最后一次订阅?>是否只需要使用一小部分线程?我认为这是有道理的,是的。
17:33:58.826 INFO 11813 --- [nio-6969-exec-3] ...Service : tick: 0
17:34:01.162 INFO 11813 --- [ionThreadPool-2] ...Service : tick: 19
17:34:02.918 INFO 11813 --- [ionThreadPool-1] ...Service : tick: 94
17:34:03.827 INFO 11813 --- [ionThreadPool-3] ...Service : tick: 1
17:34:06.162 INFO 11813 --- [ionThreadPool-2] ...Service : tick: 20
17:34:07.919 INFO 11813 --- [ionThreadPool-1] ...Service : tick: 95