类似的问题以前已经发布,但这种情况是不同的 - 有可能是它的复杂静态用法。 只是想看看是否有人对如何处理这个想法。 我得到的ConcurrentModificationException的,即使我使用的修改都围绕块名单上synchronzed。
public class Foo {
public void register() {
FooManager.addFoo(this);
}
}
public class ABC1 {
static Foo myfoo;
static {
myfoo = new Foo();
myfoo.register();
}
}
(我有类似的复式班ABC2,ABC3)
public class FooManager {
static ArrayList<Foo> m_globalFoos;
static ABC1 m_abc;
static {
m_globalFoos = new ArrayList<Foo>();
m_abc = new ABC1();
}
public static void addFoo(Foo foo) {
synchronized(m_globalFoos) { // SYNC
m_globalFoos.add(foo);
}
}
public static void showFoos() {
synchronized(m_globalFoos) { //SYNC
for (Foo foo : m_globalFoos) {
foo.print();
}
}
}
我宣布ABC1,ABC2,ABC3等在多个线程FUNC。 在我的主程序中,第一线
main() {
FooManager.showFoos();
异常详细信息:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
at com.mytest.FooManager.showFoos(FooManager.java:78)
at com.mytest.FooTest.main(FooTest.java:109)