Потому что вот пример
var hot = Flux
.fromIterable(List.of(1, 0, 2, 4, -12, 123))
.publish();
hot
.doOnNext(value -> System.out.println("[subscriber-1] [thread]: " + Thread.currentThread().getName() + ", [value]: " + value))
.subscribe();
hot.connect();
Thread.sleep(3000);
hot
.doOnNext(value -> System.out.println("[subscriber-2] [thread]: " + Thread.currentThread().getName() + ", [value]: " + value))
.subscribe();
Получаем:
[subscriber-1] [thread]: main, [value]: 1
[subscriber-1] [thread]: main, [value]: 0
[subscriber-1] [thread]: main, [value]: 2
[subscriber-1] [thread]: main, [value]: 4
[subscriber-1] [thread]: main, [value]: -12
[subscriber-1] [thread]: main, [value]: 123
И вот холодный паблишер
var cold = Flux
.fromIterable(List.of(1, 0, 2, 4, -12, 123));
cold
.doOnNext(value -> System.out.println("[subscriber-1] [thread]: " + Thread.currentThread().getName() + ", [value]: " + value))
.subscribe();
Thread.sleep(3000);
cold
.doOnNext(value -> System.out.println("[subscriber-2] [thread]: " + Thread.currentThread().getName() + ", [value]: " + value))
.subscribe();
И вывод
[subscriber-1] [thread]: main, [value]: 1
[subscriber-1] [thread]: main, [value]: 0
[subscriber-1] [thread]: main, [value]: 2
[subscriber-1] [thread]: main, [value]: 4
[subscriber-1] [thread]: main, [value]: -12
[subscriber-1] [thread]: main, [value]: 123
[subscriber-2] [thread]: main, [value]: 1
[subscriber-2] [thread]: main, [value]: 0
[subscriber-2] [thread]: main, [value]: 2
[subscriber-2] [thread]: main, [value]: 4
[subscriber-2] [thread]: main, [value]: -12
[subscriber-2] [thread]: main, [value]: 123