写一个在springboot中,使用ExecutorCompletionService执行10个线程,并用LinkedBlockingDeque队列获取值的demo

动态 未结 0 145
小小草
小小草 LV1 2023年9月23日 23:40 发表
以下是一个在 Spring Boot 中使用 ExecutorCompletionService 执行 10 个线程,并使用 LinkedBlockingDeque 队列获取值的示例: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import java.util.concurrent.*; @SpringBootApplication public class DemoApplication { public static void main(String[] args) throws InterruptedException, ExecutionException { SpringApplication.run(DemoApplication.class, args); // 创建线程池 ExecutorService executor = Executors.newFixedThreadPool(10); // 创建 CompletionService CompletionService completionService = new ExecutorCompletionService<>(executor); // 创建阻塞队列 LinkedBlockingDeque queue = new LinkedBlockingDeque<>(); // 提交任务 for (int i = 0; i < 10; i++) { final int taskId = i; completionService.submit(() -> { // 模拟耗时操作 Thread.sleep(1000); return taskId; }); } // 获取结果 for (int i = 0; i < 10; i++) { Integer result = completionService.take().get(); queue.offer(result); } // 关闭线程池 executor.shutdown(); // 输出结果 System.out.println("队列中的值为:" + queue); } } ``` 在上面的示例中,我们首先创建了一个固定大小为 10 的线程池和一个 CompletionService 对象。然后,我们提交了 10 个任务到 CompletionService 中,每个任务都会返回一个整数值。接着,我们使用 take() 方法从 CompletionService 中获取已完成的任务,并将其结果添加到阻塞队列中。最后,我们关闭了线程池,并输出了队列中的值。 需要注意的是,在使用 ExecutorCompletionService 时,我们需要手动关闭线程池,否则可能会导致程序无法正常退出。
收藏(0)  分享
相关标签: 智能问答
问题没解决?让AI助手帮你作答 AI助手
0个回复
  • 消灭零回复