我知道Publisher
不能同时发布,但是如果我使用Flux#create(FluxSink)
,可以安全地同时调用FluxSink#next
吗?
换句话说,即使FluxSink#next
被同时调用,Spring是否具有内部魔术来确保适当的事件串行发布?
public class FluxTest {
private final Map<String, FluxSink<Item>> sinks = new ConcurrentHashMap<>();
// Store a new sink for the given ID
public void start(String id) {
Flux.create(sink -> sinks.put(id, sink));
}
// Called from different threads
public void publish(String id, Item item) {
sinks.get(id).next(item); //<----------- Is this safe??
}
}
像官方指南中的this paragraph一样听起来对我来说表明上述内容确实是安全的,但我对自己的理解并不十分自信。
create
是程序创建Flux的一种更高级形式,适用于每轮多次排放,甚至来自多个线程。
答案 0 :(得分:2)
是的,Flux.create
产生了一个SerializedSink
,可以安全地从多个线程使用 @Override
public void onPause() {
super.onPause();
MemoryClass.value1 = editText1.getText().toString();
}
@Override
public void onResume() {
super.onResume();
editText1.setText(MemoryClass.value1);
}
调用