Java多线程提交按照时间顺序获取线程结果详解流程
Maven依赖
其实要不要无所谓。主要是为了方便。
cn.hutool hutool-all5.7.15
代码 不废话,上代码。
package com.hy.csdn.tools; import cn.hutool.core.thread.ThreadUtil; import java.util.Arrays; import java.util.List; import java.util.concurrent.*; import java.util.function.Consumer; /** * @author huyi * @date 2021/11/1 下午2:22 */public class ThreadPriorityUtil {private static final ExecutorService EXECUTOR_SERVICE = Executors.newFixedThreadPool(100); /*** 提交多个任务* @param tasks 任务* @param consumer 结果消费* @param泛型*/public static void submit(List > tasks, Consumer consumer) {CompletionService completionService = new ExecutorCompletionService<>(EXECUTOR_SERVICE); tasks.forEach(completionService::submit); tasks.forEach(x -> {try {consumer.accept(completionService.take().get()); } catch (InterruptedException e) {e.printStackTrace(); } catch (ExecutionException e) {e.printStackTrace(); }}); } public static void destroy() {System.out.println("摧毁线程池"); EXECUTOR_SERVICE.shutdown(); } public static void main(String[] args) {// 启动3个线程执行试试看List > tasks =Arrays.asList(() -> {try {TimeUnit.SECONDS.sleep(30); System.out.println("task 30 completed"); } catch (InterruptedException e) {e.printStackTrace(); }return 30; },() -> {try {TimeUnit.SECONDS.sleep(10); System.out.println("task 10 completed"); } catch (InterruptedException e) {e.printStackTrace(); }return 10; },() -> {try {TimeUnit.SECONDS.sleep(20); System.out.println("task 20 completed"); } catch (InterruptedException e) {e.printStackTrace(); }return 20; }); ThreadPriorityUtil.submit(tasks, x -> System.out.println("回调结果:" + x)); ThreadUtil.sleep(40000L); ThreadPriorityUtil.destroy(); }}
执行看看
文章图片
【Java多线程提交按照时间顺序获取线程结果详解流程】OK,先执行结束的线程,先消费。
总结 一个姑娘,如果有被人喜欢,而且那个人喜欢的干干净净,怎么都是一件美好的事情。
如果本文对你有帮助的话,不要吝啬你的赞,狠狠的甩给我。
文章图片
到此这篇关于Java多线程提交按照时间顺序获取线程结果详解流程的文章就介绍到这了,更多相关Java 多线程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 爱就是希望你好好活着
- 昨夜小楼听风
- 知识
- 死结。
- 我从来不做坏事
- 烦恼和幸福
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- 事件代理