Rx java 多线程环境中防止阻塞的RxJava解决方案
任务: 我有一组唯一的值-Rx java 多线程环境中防止阻塞的RxJava解决方案,rx-java,Rx Java,任务: 我有一组唯一的值-[“a”、“B”、“C”、“D”] 多个线程正在尝试从中删除值。 当它变为空时,代码应该通知一些侦听器 在Java中,我需要在每次删除元素时阻止线程,并检查集合是否为空,以防止一次发送两个相同的事件 那么,我可以在不阻塞执行的情况下用RxJava实现它吗 另外,在真实的程序中,有很多这样的设置。你的问题有点模糊,但听起来你想要这样的东西: final class RxSet { final Set<String> elements = new Has
[“a”、“B”、“C”、“D”]
多个线程正在尝试从中删除值。
当它变为空时,代码应该通知一些侦听器
在Java中,我需要在每次删除元素时阻止线程,并检查集合是否为空,以防止一次发送两个相同的事件
那么,我可以在不阻塞执行的情况下用RxJava实现它吗
另外,在真实的程序中,有很多这样的设置。你的问题有点模糊,但听起来你想要这样的东西:
final class RxSet {
final Set<String> elements = new HashSet<String>();
final AsyncSubject<Object> onEmpty = AsyncSubject.create();
public RxSet(String... initialValues) {
elements.addAll(Arrays.asList(initialValues));
}
public Observable<Object> onEmpty() {
return onEmpty;
}
public boolean take(String item) {
boolean wasEmpty = false;
boolean isEmpty = false;
boolean success = false;
synchronized (this) {
wasEmpty = set.isEmpty();
success = set.remove(item);
isEmpty = set.isEmpty();
}
if (!wasEmpty && isEmpty) {
onEmpty.onNext("became empty");
onEmpty.onComplete();
}
return success;
}
}
final类RxSet{
final Set elements=new HashSet();
final AsyncSubject onEmpty=AsyncSubject.create();
公共RxSet(字符串…初始值){
elements.addAll(Arrays.asList(initialValues));
}
公共可观察的一空{
一空即归;
}
公共布尔值(字符串项){
布尔值为空=假;
布尔isEmpty=false;
布尔成功=假;
已同步(此){
waspempty=set.isEmpty();
成功=设置。删除(项目);
isEmpty=set.isEmpty();
}
如果(!wasmempty&&isEmpty){
OneEmpty.onNext(“变空”);
onEmpty.onComplete();
}
回归成功;
}
}
请发布一些代码和说明,否则我们无法帮助您。RxJava是关于不变性和根据事件对变化作出反应的。我看不出有任何要求得到满足。