以下是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()方法关闭线程池。

java ThreadPoolExecutor 创建5个线程池每个线程池平均分配list里面的数据list大小有500条

原文地址: https://www.cveoy.top/t/topic/bVRL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录