У Guava есть сборщики, такие как ImmutableSet.toImmutableSet()
и ImmutableList.toImmutableList()
. Являются ли они потокобезопасными? Безопасно ли использовать их с параллельными потоками?
Насколько я вижу, используются обычные сборщики, которые не являются потокобезопасными:
private static final Collector<Object, ?, ImmutableSet<Object>> TO_IMMUTABLE_SET =
Collector.of(
ImmutableSet::<Object>builder,
ImmutableSet.Builder::add,
ImmutableSet.Builder::combine,
ImmutableSet.Builder::build);
С другой стороны, первый и третий параметры Collector.of()
вызывают подозрение, что JDK может создать отдельный построитель для каждого параллельного потока и объединить их результат, чтобы сделать его потокобезопасным.
extending
изImmutableCollection
, что является потокобезопасным. guava.dev/releases/19.0/api/ документы/com/google/common/collect/ - person Aman   schedule 20.10.2020ImmutableCollection#Builder
(и его подклассы), которые используются вTO_IMMUTABLE_SET
Collector
, не расширяютImmutableCollection
. См. этот вопрос. - person Xaerxess   schedule 20.10.2020