“线程中的异常”;螺纹-1“;java.util.ConcurrentModificationException

“线程中的异常”;螺纹-1“;java.util.ConcurrentModificationException,java,multithreading,arraylist,synchronization,Java,Multithreading,Arraylist,Synchronization,我的程序中有两个线程和一个ArrayList。我想从我的线程访问列表 public void run() { ... arraylist.add(myObj); ... } public void run() { ... arraylist.remove(myObj); ... } 我尝试同步每个线程 synchronized (arraylist) { //add or remove } 但它说的是“非最终字段的同步”。似乎在arraylist上还有其他没有同步的操

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

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

public void run() {
...
arraylist.remove(myObj);
...
}
我尝试同步每个线程

 synchronized (arraylist) 
 {  
    //add or remove
 } 

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

似乎在
arraylist
上还有其他没有同步的操作


非最终字段的同步
当有多个线程需要在同一对象实例上正确同步代码块时,编译器会发出此警告。

非最终字段的同步,您可以安全地忽略。 如果
arraylist
仅在构造函数中赋值,则可以将其声明为
final
,并消除警告


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

…所以将其设为最终?无论如何,我认为ono文件上的syn是一个警告,而不是一个错误参见这里的
ConcurrentModificationException
通常意味着您在对集合进行迭代时正在修改它。通常与线程无关。