我有一个充满“someObject”的ArrayList。我需要使用 4 个不同的线程(使用 Futures 和 Callables)迭代这个列表。线程将保留它遇到的前 5 个有值(value)的对象。我首先尝试创建并行流,但效果不太好。是否有一些我没有想到的明显的事情,因此每个线程都可以迭代对象,而不可能两次抓取同一个对象?
最佳答案
您可以使用AtomicInteger迭代列表:
class MyRunnable implements Runnable {
final List<SomeObject> list;
final AtomicInteger counter; // initialize to 0
public void run() {
while(true) {
int index = counter.getAndIncrement();
if(index < list.size()) {
do something with list.get(index);
} else {
return;
}
}
}
}
只要每个 MyRunnable
具有相同的 AtomicInteger
引用,它们就不会重复索引
关于java - 在Java中并行迭代单个列表而不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38111577/