java ThreadPoolExecutor 创建5个线程池每个线程池平均分配list里面的数据list大小有500条
以下是Java代码示例:
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolDemo {
public static void main(String[] args) {
// 创建一个List,存储500条数据
List<Integer> list = new ArrayList<>();
for (int i = 1; i <= 500; i++) {
list.add(i);
}
// 创建一个固定大小为5的线程池
ExecutorService executorService = Executors.newFixedThreadPool(5);
// 计算每个线程平均分配的数据量
int size = list.size();
int avg = size / 5;
int mod = size % 5;
// 分配任务给线程池
int startIndex = 0;
for (int i = 0; i < 5; i++) {
int endIndex = startIndex + avg;
if (i < mod) {
endIndex++;
}
List<Integer> subList = list.subList(startIndex, endIndex);
executorService.execute(new Task(subList));
startIndex = endIndex;
}
// 关闭线程池
executorService.shutdown();
}
static class Task implements Runnable {
private List<Integer> list;
public Task(List<Integer> list) {
this.list = list;
}
@Override
public void run() {
for (Integer i : list) {
// 处理数据的逻辑
}
}
}
}
以上代码中,我们创建了一个固定大小为5的线程池,然后计算每个线程应该平均分配的数据量。接着,我们遍历5个线程,分别给它们分配相应的数据子集,最后将每个子集的数据交给线程去处理。最后,我们调用线程池的shutdown()方法关闭线程池。
原文地址: https://www.cveoy.top/t/topic/bVRL 著作权归作者所有。请勿转载和采集!