将对象列表从一个线程传递到另一个线程

问题描述 投票:0回答:1

我有一个需求,需要批量获取记录,例如从数据库中的一百万条记录中一次获取 500 条记录,并处理每批记录。我希望使用固定线程池大小为 2 的 executorservice 来实现此功能,其中一个线程将获取记录并将其传递给另一个线程进行处理,第一个线程将返回以获取下一批记录。我无法弄清楚的是如何在此过程中将对象列表从线程 t1 传输到 t2?任何线索将不胜感激。

java multithreading batch-processing executorservice
1个回答
0
投票

实际上,您不需要大小为 2 的线程池。您只需要一个单处理线程。只需将您的记录直接传递给在 Callable 或 Runnable 内部进行的方法调用即可:

ExecutorService processor = Executors.newSingleThreadExecutor();

while (true) {
    Collection<MyRecordType> records = read500RecordsFromDatabase();
    if (records.isEmpty()) {
        break;
    }

    processor.submit(() -> processRecords(records));
}
© www.soinside.com 2019 - 2024. All rights reserved.