java - 未知的并发修改异常java使用Iterator和Vector

标签 java concurrency iterator concurrent-programming

我一直收到并发修改异常

String[] permsList = Constants.CUST_MKT_PERMS_FIELDS;
String hiddenFieldVector = new Vector<String>(permsList.length);
Iterator<String> itr = hiddenFieldVector.iterator();

for(int i = 0; i < arrayLength; i++){    //arrayLength is never null or 0

    ...a lot of code...
    String target = fromDatabase();     //this is never null

   while(itr.hasNext() && hiddenFieldVector.contains(target)){
    hiddenFieldVector.remove(target);
    Logger.debug("itr.next() = " + itr.next());
   }

    ...a lot of code...
}

有什么想法吗?

当前解决方案:

while(itr.hasNext() && hiddenFieldVector.contains(target) && (itr.next().equals(target))){
                        itr.remove();
                        Logger.debug("itr.next() = " + itr.next());
                    }

最佳答案

hiddenFieldVector.remove(target);

不要在循环时调用 list 上的 remove。循环时修改列表会抛出 ConcurrentModificationException

使用iterator 并在iterator 而不是list 上调用remove

例子:

while(itr.hasNext() && hiddenFieldVector.contains(target)){
    itr.remove();
    Logger.debug("itr.next() = " + itr.next());
   }

关于java - 未知的并发修改异常java使用Iterator和Vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12465965/

相关文章:

java - Hazelcast map 同步

java - 如何写入/读取已锁定的文件?

java - 还有一个关于 "Double-Checked-Locking"的问题

python-3.x - 在 asyncio 中批量处理任务

c++ - 运算符 "!="不匹配(c++ 迭代器)

iterator - java : The difference between iterators and arraylists

c++ - 对 InputIterator 语义/概念要求的混淆

java - 有没有办法获得 Kryonet 日志?

java - Scala 单例对象

java - 在 XPage 中运行多个线程