Collectors.joining(“,”)线程安全吗?
是java.util.stream.Collectors::joining
实现线程安全的?我可以做点什么
public final class SomeClass { private static final Collector<CharSequence, ?, String> jc = Collectors.joining(",");
public String someMethod(List<String> someList) {
return someList.parallelStream().collect(jc);
}
}
不用担心遇到并发问题?
回答:
您可以将此收集器用作Collectors
类中提供的任何其他收集器,而不必担心遇到并发问题。在Collector
不用关心线程安全的,除非它有CONCURRENT
特点。它只需要使其操作无干扰,无状态且具有关联性即可。其余的将由Stream管道本身完成。它将以不需要额外同步的方式使用收集器功能。特别是在accumulator
或combiner
函数被调用时,可以确保目前没有其他线程在相同的累加值上运行。这在收集器文档中指定:
实现基于减少库
Collector
,比如Stream.collect(Collector)
,必须遵循以下限制:<…>
*
对于非并发收集器,必须将结果提供者,累加器或组合器函数返回的任何结果串行地限制在线程中。这使得收集可以并行进行,而无需
Collector
实现任何其他同步。简化实现必须管理输入已正确分区,分区被隔离处理以及仅在累加完成后才进行合并。
请注意,收集器本身以及提供的功能都是无状态的,因此将其置于静态字段中也是安全的。状态保存在由返回外部累加器supplier
和传回accumulator
,combiner
和finisher
。因此,即使同一个收集器被多个流操作重用,它们也不会干扰。
以上是 Collectors.joining(“,”)线程安全吗? 的全部内容, 来源链接: utcz.com/qa/403622.html