Безопасно ли использовать один и тот же FluxSink из нескольких потоков одновременно? - PullRequest
0 голосов
/ 28 сентября 2018

Я знаю, что Publisher не должен публиковаться одновременно, но если я использую Flux#create(FluxSink), могу ли я безопасно вызвать FluxSink#next одновременно?

Другими словами, есть ли у Spring внутренняя магия, обеспечивающая правильное последовательное соединение?публикация событий, даже если FluxSink#next вызывается одновременно?

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??
    }
}

Это звучит для меня как , этот абзац в официальном руководстве указывает, что вышеприведенное действительнобезопасно, но я не очень уверен в своем понимании.

create - это более продвинутая форма программного создания Flux, которая подходит для нескольких выбросов за раунд, даже из нескольких потоков.

1 Ответ

0 голосов
/ 30 сентября 2018

Да, Flux.create создает SerializedSink, который можно безопасно использовать из нескольких потоков для next вызовов

...