代码之家  ›  专栏  ›  技术社区  ›  kaqqao

从多个线程同时使用相同的FluxSink安全吗

  •  0
  • kaqqao  · 技术社区  · 7 年前

    Publisher 不能同时发布,但如果我使用 Flux#create(FluxSink) FluxSink#next 同时?

    FluxSink#下一个 是否同时调用?

    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 是一种更高级的程序化创建通量的形式,适用于每轮多次发射,甚至来自多个线程。

    1 回复  |  直到 7 年前
        1
  •  6
  •   kaqqao    7 年前

    对, Flux.create SerializedSink 可以从多个线程安全地用于 next 电话