java多线程提交,如何按照时间顺序获取线程结果,看完你就懂了 | Java工具类
目录
前言
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工具类相关推荐
- 想进一线大厂?2021年最详细Java多线程面试问题集锦(含答案),看完可以和面试官扯皮了!
当我刷到这条脉脉的时候,想到当年老板面试我的时候,拿多线程问题虐我时,想想当时太难了. 悄悄给大家看几道阿里必问的面试题,测测能完美的回答几道呢? 有没有一种一定能保证线程安全的代码写法?(偷偷告诉你 ...
- 集合到文件 文件到集合 点名器 集合到文件数据排序版 标准输入流 打印流 对象序列化流 对象返序列化流 Properties 游戏次数 进程和线程 线程 多线程的实现方式 设置和获取线程名称
文章目录 集合到文件 文件到集合 点名器 集合到文件数据排序版 标准输入流 打印流 对象序列化流 对象返序列化流 Properties 游戏次数 进程和线程 线程 多线程的实现方式 设置和获取线程名称 ...
- 看完涨薪2K+_____2019 JAVA 必刷面试题
欢迎大家加入我的github项目,一起学习,一起发展 ---> 全栈工程师进阶学习站 ---> 我的前端学习笔记 --->行业内最新最群的报告,工作日每日更新 ->原生 js ...
- Java多线程复习:1(进程和线程、并发和并行)
进程和线程 进程 我们电脑中每一个运行着的程序都是一个进程,程序一旦运行就是进程. 进程可以视为程序的一个实例,大部分程序可以同时运行多个实例进程(如:浏览器.记事本.画图等),也有的程序只能启动一个 ...
- Java多线程、主线程等待所有子线程执行完毕、共享资源
1.Java创建与启动线程 Java提供两种方式创建和启动线程:1.直接Thread类,2.实现Runable接口. 1.1 继承Thread类 public class myThread exte ...
- Java多线程之----主线程会等待子线程结束再结束么,怎么让主线程等待子线程结束呐?
首先给出结论: 主线程和子线程之间没有谁先谁后结束这种关联,它们只是各自负责自己的线程任务,如果该线程的任务结束了,该线程自然会结束运行. talk is cheap,show me the code ...
- Java多线程(6)--Callable接口创建线程
与使用Runnable相比, Callable功能更强大些 ①相比run()方法,可以有返回值 ②方法可以抛出异常 ③支持泛型的返回值 ④需要借助FutureTask类,可以获取返回结果 Future ...
- java多线程的api_java多线程之:线程对象一些api
一:wait()方法,wait(long timeout) --->锁对象调用wait()方法,让当前线程小a进入等待状态,阻塞住,并让出当前线程拥有的锁. --->直到其他线程用锁对象调 ...
- Java自学第6期——Collection、Map、迭代器、泛型、可变参数、集合工具类、集合数据结构、Debug
欢迎访问我的个人网站:https://bengtian.club 集合:集合是java中提供的一种容器,可以用来存储多个数据. 集合和数组既然都是容器,它们有啥区别呢? 数组的长度是固定的.集合的长度 ...
最新文章
- 带通采样定理简单记录
- postgresql 数据库 客户端认证
- [剑指offer]面试题48:不能被继承的类
- 论文遇到的格式问题和修正方式
- 字节流复制文件 java
- Rstudio更换默认下载镜像(下载源)教程
- Java多线程编程实战(读书笔记)
- 解决MySQL Workbench导出低版本MySQL时报错Unknown table ‘column_statistics’ in information_schema的问题
- CSS3属性——(二)
- Modbus安全:M340停启和流量分析
- 流程图怎么画?绘制一个流程图的简单操作方法
- vue之ele中的table组件(复选框的回显和重置)
- 是指因计算机网络不安全导致的风险,网络安全知识竞赛题库
- excel两个指标相关性分析_excel两组数据相关性分析
- OpenXML:C#操作PPT文档
- 【渝粤教育】国家开放大学2018年秋季 3939T★汽车电控技术 参考试题
- HTC M8t unlock Bootloader/Root/S-OFF/解网络锁笔记
- 第四节 电路心法 基尔霍夫电压定律与电流定律
- 微信小程序页面添加背景图,图片全屏显示
- php将json转化成数组,php如何把json转换成数组