【发布时间】:2010-02-15 03:08:26
【问题描述】:
问题是这样的。我做了一套
Set<User> users = Collections.synchronizedSet(new HashSet<User>())
...
for(User u : users){
//do something with u
}
现在,根据 Java 文档。
用户必须 手动同步返回 迭代时排序集或 它的任何子集、头集或尾集 意见。
SortedSet s = Collections.synchronizedSortedSet(new HashSortedSet()); ... synchronized(s) { Iterator i = s.iterator(); // Must be in the synchronized block while (i.hasNext()) foo(i.next()); }
我很确定每个语法都使用迭代器,但我不确定是否应该用同步块包装每个循环。
另一件事,我的 IDE (IntelliJ IDEA) 不断报告说,在非最终字段上使用同步块不太可能具有有用的语义,因为不同的线程可能是不同的对象,即使在处理同一个对象时也是如此。
【问题讨论】:
-
不知道,我是从文档中复制的。这可能是一个遗物的例子。
标签: java collections synchronization