java - 在Java中并行迭代单个列表而不重复

标签 java multithreading parallel-processing

我有一个充满“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/

相关文章:

java - 正确地在图像上绘图

java - Azure OAuth2 : can't validate access token

java - 如何为用户定义的类实现通用比较器

parallel-processing - 如何在 Ansible 剧本中并行运行几个角色?

r - 使用并行时如何 `print`或 `cat`

java - Icecast 音频客户端的问题

java - 线程和异常处理

c - 向 C 中的 pthreads 发送和捕获信号

xcode - 如何使用 xcode 4 编译 openmpi 程序?

c# - 实时显示字符串值