问题标签 [concurrentmodification]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 如何应对 ConcurrentModificationException?
如果有以下问题:我有一个列表,我正在使用增强的 for 循环。每次我想从列表中删除某事时,我都会得到一个 ConcurrentModificationException。我已经知道为什么会抛出这个异常,但我不知道如何修改我的代码,以便它工作。这是我的代码:
我也尝试了这个实现。
也不工作...
是否有常用的标准解决方案?(希望……这并不明显:D)
java - java HashMap的快速失败行为
我玩弄java.util.HashMap
以了解fail-fast
行为是什么。
我得到了结果
我也尝试过使用迭代器
在这两种情况下我都没有得到任何ConcurrentModificationException
..这是因为(来自 javadoc)
无法保证迭代器的快速失败行为,因为一般来说,在存在不同步的并发修改的情况下,不可能做出任何硬保证。快速失败的迭代器会尽最大努力抛出 ConcurrentModificationException
我检查了另一个线程,上面写着,它会抛出ConcurrentModificationException
..你觉得呢?
java - 如何处理 ConcurrentModificationException
我从我的冷却计时器中获得了 ConcurrentModificationException。我使用一个线程来减少每秒的值,如下所示:
所以每秒它应该将每个玩家的冷却时间减少 20,但问题是我在运行程序时每隔几个小时就会获得一次 CME,尤其是当很多人在线时。我该如何做到这一点,如果它仍在修改列表,它将等到当前操作完成并创建一种修改队列?谢谢!这是堆栈跟踪:
第 13 行是 for 循环的开始...
java - Java:在修改集合的内容时迭代集合
我希望迭代一个集合,但集合的内容将在其迭代期间修改。我希望在创建迭代器时迭代原始集合,而不是迭代添加到集合中的任何新元素。这怎么可能?这是 set 的默认行为还是我该如何完成?
我能想到的一种方法是从原始集合中获取一个不会被修改的新集合,但这似乎不优雅,必须有更好的解决方案。
hibernate - 与休眠同时更新
假设 user_1 和 user_2 在同一时刻访问了一个 id = 101、name = Rahul、accountBalance = 1500 的员工。所以两个用户现在都有具有上述价值观的员工。User_1 向 accountBalance 添加了 1000 并更新了员工。所以他的余额现在在数据库中是 2500。
在 user_1 更新员工之后,user_2 立即将 500 添加到帐户余额中。因此 500 将添加到当前在 user_2 手中的员工帐户余额中。所以 1500+500 =2000。
但是,实际上应该是 (1500+1000)+500 = 3000。
这个问题是如何在java中用hibernate处理的?
我们是否要在业务方法 updateEmployee() 中再次检查最新值,然后将金额添加到新的 accountBalance 中?
请帮助我以适当的方式处理这种情况。谢谢并恭祝安康
java - 如何修复此错误 java.util.ConcurrentModificationException
我在下一行收到错误。我正在做添加到 jsonarray 的过程。请帮我。
java - LinkedList 迭代器抛出并发修改异常
有没有办法阻止 ListIterator 抛出 ConcurrentModificationException?这就是我想要做的:
- 使用一堆对象创建一个 LinkedList,这些对象具有要经常执行的特定方法。
- 有一定数量的线程(比如 N),所有这些线程都负责执行 LinkedList 中对象的上述方法。例如,如果列表中有 k 个对象,线程 n 将执行列表中第 n 个对象的方法,然后继续执行第 n+N 个对象,然后执行第 n+2N 个,以此类推,直到它循环回到开头。
这里的问题在于这些对象的检索。我显然会使用 ListIterator 来完成这项工作。但是,我预测这不会走得太远,这要归功于根据文档将抛出的 ConcurrentModificationException。我希望列表是可修改的,并且迭代器不在乎。事实上,预计这些对象会创建和销毁列表中的其他对象。我想到了一些解决方法:
- 创建和销毁一个新的迭代器以检索给定索引处的对象。但是,这是 O(n),不可取。
- 改为使用 ArrayedList;然而,这也是不可取的,因为删除是 O(n) 并且列表需要不时扩展(也许是收缩?)存在问题。
- 编写我自己的 LinkedList 类。不想。
因此,我的问题。有没有办法阻止 ListIterator 抛出 ConcurrentModificationException?
java - 同步访问 ArrayList
我试图通过并行计算来计算所有素数,直到任意数字。我知道 isPrime() 可以从现在的状态进行改进,但主要问题是我无法同步对存储结果的 ArrayList 的访问。我已经实例化了一个虚拟对象“m”来充当监视器并控制对阵列的访问。显然我在某处推理时犯了一个错误,因为我每次都得到一个 java.util.ConcurrentModificationException 。注意:要点
编辑:更新后显示完成建议。
为了方便起见,我已经包含了我的 ant 脚本 :)
java - ConcurrentSkipListSet 是静态的吗?
我在处理 HashSet 时遇到了 concurrentModificatoin 异常,因此转移到了 ConcurrentSkipListSet。虽然并发问题解决了,但我现在有一个新问题。ConcurrentSkipListSet 似乎默认是静态的。是这样吗?我在一个递归函数中使用它,该函数有一个迭代器,它迭代相同。当下一个元素被迭代时,由于同一函数的另一个重复实例所做的更改会反映在同一个对象中(在正常递归中通常不会出现这种情况,其中每个实例都在堆栈中分配了自己的空间)。而且我不希望这些更改被反映。这个问题有什么解决办法吗?
提前致谢 :)
我正在使用java,这是代码......
我正在从集合 b 中删除元素,当函数返回到以前的状态(while 循环内的迭代器)时,原始集合 b 会受到影响。我不希望这种情况发生。有人请帮忙!:(
java - 地图中的并发修改问题
我正在使用结构的并发哈希图
在给定的 map ( Map<String, Object>
) 中使用的 Map 也是一个并发的 hashmap,但 set 是唯一的TreeSet
类型。
当我在日志中添加以下行时,我仍然得到并发修改异常,
以及处理此地图的同一类的其他一些部分。
此映射在批处理过程中被多个线程广泛用于在映射中放置和删除值,使用的 java 版本是 1.5。
我认为异常是由于 Treeset 造成的,而且我发现对于 Set 类型没有类似的并发处理集合实现。
如果有人确认我对给定问题的思考是否正确,那将是很好的,也请建议解决这个问题?