【发布时间】:2017-05-13 06:21:27
【问题描述】:
我有一个需要遍历并在此过程中执行工作的列表。我的问题是,对于我的程序,由于并发性,很难在每个循环中完成列表中所需的所有工作。我的解决方案是根据需要多次迭代循环,并在每次迭代中完成部分工作。这个例子应该能说明我的意思:
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
// Method A
for (String item : list) {
doWorkThing1(item);
doWorkThing2(item);
}
// Method B
for (String item : list) {
doWorkThing1(item);
}
for (String item : list) {
doWorkThing2(item);
}
方法B是我很好奇的。多次迭代循环是否有显着的成本?由于我假设大部分性能成本将用于“工作”方法,我想知道是否可以公平地说方法 A 和方法 B 之间的差异可以忽略不计?
【问题讨论】:
-
我看不出并发的来源。您是否有多个线程在列表上工作?在这种情况下,A 和 B 都不安全。你能把代码做成单线程的吗?
-
如果 A 修改列表(即删除项目),则可能需要 B。
-
我不想关注问题中的并发问题。只是假设想知道在性能方面是否存在差异。
-
请注意语义有何不同:要么一起运行
doWorkThing1 和2,要么先运行所有doWorkThing1,然后运行所有doWorkThing2。 -
好问题,我会尽力给你答案;-)
标签: java performance iteration