首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 8中的Fork-Join框架是最佳选择吗?

Java 8中的Fork-Join框架是最佳选择吗?
EN

Stack Overflow用户
提问于 2016-02-12 18:12:52
回答 1查看 164关注 0票数 0

我有一个场景,我想读取一个由大约2000条记录组成的电子表格,并将其输入到数据库中。

目前我们使用的是Executor框架。我们的限制是任务数只有5。每个任务从excel中读取20行数据。我们提供要从excel读取到每个任务的行的起始索引和结束索引。

比如说,目前,

任务1处理1-20个任务

任务-2处理21-40

任务-3处理41-60

任务-4句柄61-80

Task-5处理81-100

如果Task-1完成执行,它将占用接下来的20行,即101-120行。

假设如果Task-2在Task-1之前完成,它将从121-140开始读取,而不是101-120。

在Fork-Join框架中,我是否可以更有效地处理这个场景,只有5个任务,每个任务20行?

需要深入了解性能问题。

EN

回答 1

Stack Overflow用户

发布于 2016-02-12 18:39:24

不需要切换线程池。为了使负载更加均衡,您可以只维护指向第一个未采用行的原子变量:

代码语言:javascript
复制
AtomicInteger currentRow = new AtomicInteger(); // shared between tasks
final int maxRow = 2000;
final int batchSize = 20;

// Inside every task:
while(true) {
    int row = currentRow.getAndAdd(batchSize);
    if(row >= maxRow) return;
    int from = row+1;
    int to = Math.min(row+batchSize, maxRow);
    // process rows from..to; it's guaranteed that other threads
    // do not process the same rows.
}

每个任务的主体都是完全相同的。此外,此实现不依赖于创建的任务数量。如果您稍后决定有3个任务或7个任务,只需调整线程池大小并提交更多(或更少)任务即可。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35359904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档