问题标签 [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.
iterator - 另一个 ConcurrentModificationException 问题
我搜索了 StackOverflow 并且有很多 ConcurrentModificationException 问题。读完之后,我还是一头雾水。我得到了很多这样的例外。我正在使用“注册表”设置来跟踪对象:
我通过像这样访问 ArrayLists 向这些列表中添加和删除对象:Registry.effects.add(obj)
和Registry.effects.remove(obj)
我设法通过使用重试循环来解决一些错误:
但在其他情况下,这是不切实际的。我的drawProjectiles()
方法中不断收到 ConcurrentModificationExceptions,即使它没有修改任何内容。我想罪魁祸首是如果我触摸了屏幕,它会创建一个新的 Projectile 对象并将其添加到 Registry.proj 而 draw 方法仍在迭代。
我不能很好地用draw方法做一个重试循环,否则它会重新绘制一些对象。所以现在我不得不找到一个新的解决方案。有没有更稳定的方法来完成我正在做的事情?
哦,我的问题的第 2 部分:很多人建议使用 ListIterators(正如我一直在使用的那样),但我不明白.. 如果我调用ListIterator.remove()
它是否从它正在迭代的 ArrayList 中删除该对象,或者只是将其从迭代器本身?
testing - 如何对 Grails 应用程序进行并发修改测试
我想运行模拟用户同时为 grails 应用程序修改某些数据的测试。
我可以使用任何插件/工具/机制来有效地做到这一点吗?它们不必是特定于 grails 的。应该可以并行触发多个动作。
我更喜欢在功能级别上运行测试(到目前为止,我正在使用 Selenium 进行其他测试)以从用户的角度查看结果。当然,如果您建议在集成级别上运行并发修改测试,那么这可以在集成测试之外完成。
linux-kernel - 在没有写屏障的情况下,磁盘控制器如何处理对同一扇区的并发写入?
当我使用 O_DIRECT|O_ASYNC 打开一个文件并对同一个磁盘扇区进行两次并发写入,中间没有 fsync 或 fdatasync 时,linux 磁盘子系统或硬件磁盘控制器是否提供任何保证,即该磁盘扇区上的最终数据将是第二个写?
虽然 O_DIRECT 确实绕过了 OS 缓冲区缓存,但数据最终会出现在低级 IO 队列中(磁盘调度程序队列、磁盘驱动程序队列、硬件控制器的缓存/队列等)。我一直跟踪 IO 堆栈到电梯算法。
例如,如果以下请求序列最终出现在磁盘调度程序队列中
电梯代码将执行“反向合并”以分别从缓冲区 1,2 合并扇区 1,2。然后发出磁盘两个磁盘 IO。但我不确定磁盘扇区 1 上的最终数据是来自缓冲区 1 还是缓冲区 3(因为我不知道驱动程序/控制器的写入重新排序语义)。
场景二:
这种情况将如何处理?一个更基本的问题是,在使用 AIO 以 O_DIRECT 模式进行写入时,在没有显式写入屏障的情况下,这个请求序列能否最终进入磁盘调度程序的队列?
如果是,是否有任何排序保证,例如“多次写入同一扇区将导致最后一次写入成为最终写入”?
或者是非确定性的排序[任由磁盘控制器/其缓存重新排序障碍内的写入以优化寻道时间]
java - 在迭代中修改列表
我们都知道这是非法的,并且会抛出ConcurrentModificationException
:
但是这个呢?
因为循环在theLists
' 的迭代器next
被调用之前被打破,所以没有ConcurrentModificationException
. 但这是否使其合法?
android - MapActivity 中的 ConcurrentModificationException
这是我在这里的第一个问题,所以如果有什么问题,请告诉我。
现在,我有一个public class MainMap extends MapActivity
用于MyLocationListener
用户位置的 a 和一个HelloItemizedOverlay。我从要添加标记的 XML 文件中获取某些 POI(非常基本的覆盖)。
用户按下按钮,AsyncTask 启动:
清除 MapOverlay(this.mv 是 MapView):
当我有足够的信息来添加标记时,这是我的连接方法调用的方法:
这应该是所有相关的代码。
问题是当我添加 POI并缩放地图(或移动它)时,我得到一个ConcurrentModificationException
.
我已经搜索了这个站点,阅读了类似的线程(例如这个),但我真的找不到我做错了什么。
了解我自己,这可能是显而易见的。
提前致谢,
艾尔万
java - 在 Java 中防止零星 ConcurrentModificationException 的最佳做法是什么?
哪个用于迭代列表或映射的代码序列可防止 ConcurrentModificationException?我们的代码中有反复和零星的 ConcurrentModificationException。问题有 2 个原因。
- 另一个线程在迭代时更改列表
- 在循环中调用的方法正在更改列表。
问题 1 可以通过同步循环来解决。但是,如果像原因 2 一样在循环中调用外星代码,那就不好了。
问题 2 可以通过列表或地图的副本来解决。
这意味着列表或映射必须在循环之前复制到同步块中。有更好的解决方案吗?
一些示例代码:
java - 在 Java 中,这如何在单线程程序中引发 ConcurrentModificationException?
我正在阅读这个“ Freuqent Java concurrency questions”问题,并被一个关于java.util.ConcurrentModificationException的答案弄糊涂了。
我对答案的理解是,这可能发生在单线程程序中。如何或什么条件导致以下代码抛出异常?
java - 我收到以下异常:“java.util.ConcurrentModificationException”
当我运行这段代码时,我收到“发生异常:java.util.ConcurrentModificationException”。有人在这里看到问题是什么吗?
非常感谢!!
java - 在列表迭代期间从 java.util.List 中删除元素时引发 ConcurrentModificationException?
当我运行这段代码时,我会抛出一个ConcurrentModificationException
.
看起来好像当我从 中删除指定元素时list
,list
不知道它size
已被更改。
我想知道这是否是collections
删除元素的常见问题?
java - ArrayList 上的 java.util.ConcurrentModificationException
我有一个服务器类和一个定时器,它应该清除死客户端(崩溃的客户端)。我按照下面的示例在 Timer 遍历用户时锁定了集合,但我仍然得到这个异常(在我使连接的客户端崩溃之后)。
http://www.javaperformancetuning.com/articles/fastfail2.shtml