“线程中的异常”;螺纹-1“;java.util.ConcurrentModificationException
我的程序中有两个线程和一个ArrayList。我想从我的线程访问列表“线程中的异常”;螺纹-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上还有其他没有同步的操
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
通常意味着您在对集合进行迭代时正在修改它。通常与线程无关。