gpt4 book ai didi

java - 对于同时增长的列表上的每个循环

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:48:25 25 4
gpt4 key购买 nike

我在 java 中有一个 for-each 循环。

for-each 在线程中的 myList 上运行。 myList 可以同时增长。我有一些问题:

  1. 如果我开始 for-each 循环,并且在它开始后,一个项目被添加到列表中,for-each 循环中的操作会在它上面运行吗?
  2. 假设上述问题的答案是否定的。我有点问题。 for-each 循环在 while(true) 循环中,因此它将重新开始。我希望 for-each 循环在每个项目上运行一次。我无法在 for-each 循环期间删除项目,因为我得到了 ConcurrentModificationException。所以我的解决方案是在 for-each 循环结束后删除所有列表项。但是,这样一来,如果在 for-each 循环开始后添加到列表中的项目也被删除,则 for-each 循环永远不会在该项目上运行。

我的目标是制作一个在可以同时增长的列表上运行的 for-each。我希望 for-each 循环永远不会错过任何一个项目,也永远不会在同一项目上运行两次或更多次。解决方案是什么?

最佳答案

使用 Iterator.remove 不会让您遇到 ConcurrentModificationException,但另一种解决方案是不使用 foreach 循环而只是循环,例如:

// assuming that this is a list of Strings
List<String> list = ...
while(!list.isEmpty())) {
String data = list.remove(0);
...process data...
}

这将允许您处理添加到列表中的每个项目并且只处理一次。虽然上面有一个小窗口,但 isEmpty 可以返回 true 并且可以将新项目添加到列表中(这可能发生在多线程环境中)。

关于java - 对于同时增长的列表上的每个循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14894347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com