我有一个私有的LinkedHashMap,用于从不同的线程中读取(仅用于读取):
class foo {
private LinkedHashMap map = ...;
public publicMethodCalledFromDifferentThreads() {
for (Object foo : map) {
...
}
}
}
这个实现不是线程安全的,所以 for
循环无法正确地工作。我尝试自己找到解决方案,唯一想到的是以下内容:
class foo {
private LinkedHashMap map = ...;
private Map.Entry[] mapEntries = map.entrySet().toArray() ...;
public publicMethodCalledFromDifferentThreads() {
for (int i = 0; i < mapEntries.length; i++) {
mapEntries[i]...
...
}
}
}
最终我需要有两个变量而迭代变得非常复杂。有什么更好的方法来处理这种情况吗?
谢谢!
nextEntry = e.after;
(其中nextEntry
是新迭代器中的一个成员),除此之外不会产生任何副作用。 - user166390