在Java中,可以使用线程池来实现多线程执行任务,并等待所有任务执行完毕返回结果。下面是一个示例代码:

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;

public class ThreadPoolExample {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        // 创建线程池
        ExecutorService executorService = Executors.newFixedThreadPool(5);

        // 创建任务列表
        List<Callable<Integer>> tasks = new ArrayList<>();
        tasks.add(new MyTask(1));
        tasks.add(new MyTask(2));
        tasks.add(new MyTask(3));
        tasks.add(new MyTask(4));
        tasks.add(new MyTask(5));

        // 执行任务并获取Future列表
        List<Future<Integer>> futures = executorService.invokeAll(tasks);

        // 等待所有任务执行完毕并获取结果
        int sum = 0;
        for (Future<Integer> future : futures) {
            sum += future.get();
        }

        // 关闭线程池
        executorService.shutdown();

        System.out.println("Sum: " + sum);
    }

    static class MyTask implements Callable<Integer> {
        private int number;

        public MyTask(int number) {
            this.number = number;
        }

        @Override
        public Integer call() throws Exception {
            // 模拟耗时操作
            Thread.sleep(1000);
            return number * number;
        }
    }
}

在上述示例中,首先创建了一个固定大小为5的线程池。然后创建了一个任务列表,每个任务都是一个实现了Callable<Integer>接口的类。接着使用executorService.invokeAll(tasks)方法执行任务,并获取一个Future列表。最后,使用future.get()方法获取每个任务的结果,并累加到sum变量中。最后,关闭线程池并输出sum的值。

注意,invokeAll方法会阻塞直到所有任务执行完毕,因此可以确保在获取结果时所有任务都已经完成。

java for循环 使用线程池多线程执行任务 并且等待完全返回

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

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