java - synchronized Collection 的 toArray() 方法是同步的吗?

标签 java collections synchronized

如果我有一个这样的同步集合

Collection c = Collections.synchronizedCollection(myCollection);

synchronizedCollection 的 javadoc 提到外部迭代必须像这样同步:

synchronized (c) {
 Iterator i = c.iterator();
 while (i.hasNext()) {
     process (i.next());
 }
}

我可以假设 c.toArray() 是同步的,因此当方法执行时集合不会发生变化吗?

或者我是否也需要同步它:

synchronized (c) {
  c.toArray();
}

最佳答案

来自Javadoc对于 synchronizedCollection:

Returns a synchronized (thread-safe) collection backed by the specified collection.

因此,c.toArray() 不需要任何额外的同步。 SynchronizedCollectiontoArray() 方法将为您进行锁定。本质上,这就是 synchronizedCollection() 的全部要点。

如果您想确认契约(Contract)的这种阅读与实际执行一致,请参阅GrepCode .

关于java - synchronized Collection 的 toArray() 方法是同步的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9414297/

相关文章:

java - 如何防止同步方法中的死锁?

java - 简单的 Java 同步块(synchronized block)可以抛出异常吗?

java - 从 java 中的包加载 log4j 属性

collections - 如何在Kotlin中使用不可变的持久性集合?

node.js - NodeJS/Mongo : Looping a query through various collections

java - 检查 Hamcrest 中的 List 是否为空

java - 使用同步但结果 IllegalMonitorStateException 从另一个类通知线程

java - 如何在 Jetty 9.4 中使用 Spring WebApplicationInitializer?

java - 在java中以有效角度旋转BufferedImage

java - 是先学数据结构和算法还是先学Java?