是同步Collection的toArray()方法同步?

art*_*tur 7 java collections synchronized

如果我有这样的同步集合

Collection c = Collections.synchronizedCollection(myCollection);

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

synchronized (c) {
 Iterator i = c.iterator();
 while (i.hasNext()) {
     process (i.next());
 }
}
Run Code Online (Sandbox Code Playgroud)

我可以假设它c.toArray()是同步的,因此当方法执行时不会对集合进行任何更改吗?

或者我也需要同步它:

synchronized (c) {
  c.toArray();
}
Run Code Online (Sandbox Code Playgroud)

NPE*_*NPE 5

的JavadocsynchronizedCollection:

返回由指定集合支持的同步(线程安全)集合.

因此,c.toArray()不需要任何额外的同步.SynchronizedCollectiontoArray()方法会为你做锁定.从本质上讲,这就是重点synchronizedCollection().

如果您想确认此合同读数与实际实施一致,请参阅GrepCode.