如果我有一个这样的同步集合
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()
不需要任何额外的同步。 SynchronizedCollection
的 toArray()
方法将为您进行锁定。本质上,这就是 synchronizedCollection()
的全部要点。
如果您想确认契约(Contract)的这种阅读与实际执行一致,请参阅GrepCode .
关于java - synchronized Collection 的 toArray() 方法是同步的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9414297/