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是关于不变性和根据事件对变化作出反应的。我看不出有任何要求得到满足。