She*_*lef 3 java multithreading list arraylist
我在java中有一个for-each循环.
for-each myList在一个线程中运行.myList可以同时成长.我有一些问题:
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...
}
Run Code Online (Sandbox Code Playgroud)
这将允许您处理添加到列表中的每个项目,并且只执行一次.上面有一个小窗口,但isEmpty可以返回true,并且可以将新项添加到列表中(这可能发生在多线程环境中).
| 归档时间: |
|
| 查看次数: |
303 次 |
| 最近记录: |