Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RxJava-无法访问可观察的';谁的订户?_Java_Monads_Reactive Programming_Rx Java - Fatal编程技术网

RxJava-无法访问可观察的';谁的订户?

RxJava-无法访问可观察的';谁的订户?,java,monads,reactive-programming,rx-java,Java,Monads,Reactive Programming,Rx Java,我学会了在反应式编程中使用主题,尽管我发现它们非常方便。但我知道他们可能被滥用。因此,我尝试创建一个无限的可观察冷可观察通常一次与单个订户交互,即使您订阅了更多,它们也独立运行,并不需要真正了解彼此 另一方面,主体必须在自己接收多播事件时跟踪其订阅者 快速查看您的代码表明存在一些竞争条件和丢失通知的可能性。相反,您可以依赖BehaviorSubject,这是异步字的“反应属性”。让它存储当前不可变映射并处理订阅者: BehaviorSubject<ImmutableMap> bs =

我学会了在反应式编程中使用
主题
,尽管我发现它们非常方便。但我知道他们可能被滥用。因此,我尝试创建一个无限的
可观察冷可观察通常一次与单个订户交互,即使您订阅了更多,它们也独立运行,并不需要真正了解彼此

另一方面,主体必须在自己接收多播事件时跟踪其订阅者

快速查看您的代码表明存在一些竞争条件和丢失通知的可能性。相反,您可以依赖
BehaviorSubject
,这是异步字的“反应属性”。让它存储当前不可变映射并处理订阅者:

BehaviorSubject<ImmutableMap> bs = BehaviorSubject.create();
Subject<ImmutableMap, ImmutableMap> sync = bs.toSerialized();

forKey(k): bs.map(m -> m.get(k));

refresh(): sync.onNext(importFromDb());
BehaviorSubject bs=BehaviorSubject.create();
Subject sync=bs.toSerialized();
forKey(k):bs.map(m->m.get(k));
刷新():sync.onNext(importFromDb());

我没有足够的经验对你的问题给出一个恰当的答案,但是:1.)你可能会在CR上发现我的问题的答案很有趣:2.)你可能想看看源代码sqlbrite,特别是这个文件,它在内部使用
主题来处理重新加载/触发:我怀疑可能存在种族条件。那么为什么人们经常说几乎不应该使用主题呢?就我的目的和你所展示的,它们在某些情况下似乎是合适的。这种“不要使用”的说法对我来说总是太苛刻了。我想说你应该首先寻找其他的方法,但是有一些用法预期暗示着主语的使用几乎是立即的。
BehaviorSubject<ImmutableMap> bs = BehaviorSubject.create();
Subject<ImmutableMap, ImmutableMap> sync = bs.toSerialized();

forKey(k): bs.map(m -> m.get(k));

refresh(): sync.onNext(importFromDb());