线程“Thread-1”中的异常java.util.ConcurrentModificationException

时间:2013-03-18 13:38:04

标签: java multithreading arraylist synchronization

我的程序中有两个线程和一个ArrayList。我想从我的线程访问列表。

public void run() {
...
arraylist.add(myObj);
...
}

public void run() {
...
arraylist.remove(myObj);
...
}

我尝试了每个线程的同步。

 synchronized (arraylist) 
 {  
    //add or remove
 } 

但它说“同步非最终字段”。

2 个答案:

答案 0 :(得分:1)

您可以放心忽略的

同步非最终字段 is only a warning。 如果arraylist仅在构造函数中指定,则可以将其声明为final并删除警告。

您需要在列表上进行同步,因为remove方法本身并不是线程安全的(一个线程可能会修改列表,而 remove正在搜索元素被删除)。

答案 1 :(得分:0)

似乎arraylist没有同步就有其他操作。

Synchronization of non-final field当有多个线程需要在同一对象实例上同步正确的代码块时,编译器会发出此警告。