目录

前言

Maven依赖

代码

总结


前言

在工作中是否存在这样的场景,多个线程提交执行,你不想全部线程执行结束了获取结果,而是有线程完成返回结果就获取消费。本文提供该场景的工具类,可以直接用哦。

Maven依赖

其实要不要无所谓。主要是为了方便。

        <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.15</version></dependency>

代码

不废话,上代码。

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 <T> 泛型*/public static <T> void submit(List<Callable<T>> tasks, Consumer<T> consumer) {CompletionService<T> 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<Callable<Integer>> 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();}
}

执行看看

OK,先执行结束的线程,先消费。

总结

一个姑娘,如果有被人喜欢,而且那个人喜欢的干干净净,怎么都是一件美好的事情。

如果本文对你有帮助的话,不要吝啬你的赞,狠狠的甩给我。

java多线程提交,如何按照时间顺序获取线程结果,看完你就懂了 | Java工具类相关推荐

  1. 想进一线大厂?2021年最详细Java多线程面试问题集锦(含答案),看完可以和面试官扯皮了!

    当我刷到这条脉脉的时候,想到当年老板面试我的时候,拿多线程问题虐我时,想想当时太难了. 悄悄给大家看几道阿里必问的面试题,测测能完美的回答几道呢? 有没有一种一定能保证线程安全的代码写法?(偷偷告诉你 ...

  2. 集合到文件 文件到集合 点名器 集合到文件数据排序版 标准输入流 打印流 对象序列化流 对象返序列化流 Properties 游戏次数 进程和线程 线程 多线程的实现方式 设置和获取线程名称

    文章目录 集合到文件 文件到集合 点名器 集合到文件数据排序版 标准输入流 打印流 对象序列化流 对象返序列化流 Properties 游戏次数 进程和线程 线程 多线程的实现方式 设置和获取线程名称 ...

  3. 看完涨薪2K+_____2019 JAVA 必刷面试题

    欢迎大家加入我的github项目,一起学习,一起发展 ---> 全栈工程师进阶学习站 ---> 我的前端学习笔记 --->行业内最新最群的报告,工作日每日更新 ->原生 js ...

  4. Java多线程复习:1(进程和线程、并发和并行)

    进程和线程 进程 我们电脑中每一个运行着的程序都是一个进程,程序一旦运行就是进程. 进程可以视为程序的一个实例,大部分程序可以同时运行多个实例进程(如:浏览器.记事本.画图等),也有的程序只能启动一个 ...

  5. Java多线程、主线程等待所有子线程执行完毕、共享资源

    1.Java创建与启动线程 Java提供两种方式创建和启动线程:1.直接Thread类,2.实现Runable接口. 1.1  继承Thread类 public class myThread exte ...

  6. Java多线程之----主线程会等待子线程结束再结束么,怎么让主线程等待子线程结束呐?

    首先给出结论: 主线程和子线程之间没有谁先谁后结束这种关联,它们只是各自负责自己的线程任务,如果该线程的任务结束了,该线程自然会结束运行. talk is cheap,show me the code ...

  7. Java多线程(6)--Callable接口创建线程

    与使用Runnable相比, Callable功能更强大些 ①相比run()方法,可以有返回值 ②方法可以抛出异常 ③支持泛型的返回值 ④需要借助FutureTask类,可以获取返回结果 Future ...

  8. java多线程的api_java多线程之:线程对象一些api

    一:wait()方法,wait(long timeout) --->锁对象调用wait()方法,让当前线程小a进入等待状态,阻塞住,并让出当前线程拥有的锁. --->直到其他线程用锁对象调 ...

  9. Java自学第6期——Collection、Map、迭代器、泛型、可变参数、集合工具类、集合数据结构、Debug

    欢迎访问我的个人网站:https://bengtian.club 集合:集合是java中提供的一种容器,可以用来存储多个数据. 集合和数组既然都是容器,它们有啥区别呢? 数组的长度是固定的.集合的长度 ...

最新文章

  1. 带通采样定理简单记录
  2. postgresql 数据库 客户端认证
  3. [剑指offer]面试题48:不能被继承的类
  4. 论文遇到的格式问题和修正方式
  5. 字节流复制文件 java
  6. Rstudio更换默认下载镜像(下载源)教程
  7. Java多线程编程实战(读书笔记)
  8. 解决MySQL Workbench导出低版本MySQL时报错Unknown table ‘column_statistics’ in information_schema的问题
  9. CSS3属性——(二)
  10. Modbus安全:M340停启和流量分析
  11. 流程图怎么画?绘制一个流程图的简单操作方法
  12. vue之ele中的table组件(复选框的回显和重置)
  13. 是指因计算机网络不安全导致的风险,网络安全知识竞赛题库
  14. excel两个指标相关性分析_excel两组数据相关性分析
  15. OpenXML:C#操作PPT文档
  16. 【渝粤教育】国家开放大学2018年秋季 3939T★汽车电控技术 参考试题
  17. HTC M8t unlock Bootloader/Root/S-OFF/解网络锁笔记
  18. 第四节 电路心法 基尔霍夫电压定律与电流定律
  19. 微信小程序页面添加背景图,图片全屏显示
  20. php将json转化成数组,php如何把json转换成数组

热门文章

  1. RecyclerView实现条目拖拽,左滑、右滑移除效果
  2. 数据结构与算法-平衡二叉搜索树
  3. Python基础操作(2)
  4. excel根据空格把数据分列
  5. awl伪装MAC地址进行多线程SYN攻击
  6. Kubernetes 调度 - 污点和容忍度详解
  7. 出现“连接到服务器失败。错误: 0x80080005”错误的解决办法
  8. js设计模式之代理模式
  9. Simulink学习——弹球仿真三维动画模型(Simulink3D演示动画学习01)
  10. 74cms|骑士cms|开源招聘系统,目录结构