2
RxJavaの内部については、David Karnokの記事thisを読んでいましたが、RxJavaのSerializedObserver
クラスに近い実装例がありました。そこで問題は、なぜ内部q
変数最初ブロックに導入されましたRxJava SerializedObserverの実装
class ValueListEmitterLoop<T> {
List<T> queue;
boolean emitting;
Consumer<? super T> consumer;
public void emit(T value) {
synchronized (this) {
if (emitting) {
List<T> q = queue;
if (q == null) {
q = new ArrayList<>();
queue = q;
}
q.add(value);
return;
}
emitting = true;
}
consumer.accept(value);
for (;;) {
List<T> q;
synchronized (this) {
q = queue;
if (q == null) {
emitting = false;
return;
}
queue = null;
}
q.forEach(consumer);
}
}
}
:ここでは、コードのですか?私は明らかに第二のブロックの中でその背後にある推論を見る。
if (queue == null) {
queue = new ArrayList<>();
}
queue.add(value);
ありがとうございました!私はあなたの答えを期待していた。 –