Java多線程提交按照時間順序獲取線程結(jié)果詳解流程
Maven依賴
其實(shí)要不要無所謂。主要是為了方便。
<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); /** * 提交多個任務(wù) * @param tasks 任務(wù) * @param consumer 結(jié)果消費(fèi) * @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個線程執(zhí)行試試看 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("回調(diào)結(jié)果:" + x)); ThreadUtil.sleep(40000L); ThreadPriorityUtil.destroy(); } }
執(zhí)行看看
OK,先執(zhí)行結(jié)束的線程,先消費(fèi)。
總結(jié)
一個姑娘,如果有被人喜歡,而且那個人喜歡的干干凈凈,怎么都是一件美好的事情。
如果本文對你有幫助的話,不要吝嗇你的贊,狠狠的甩給我。
到此這篇關(guān)于Java多線程提交按照時間順序獲取線程結(jié)果詳解流程的文章就介紹到這了,更多相關(guān)Java 多線程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一文教會你用mybatis查詢數(shù)據(jù)庫數(shù)據(jù)
MyBatis本身是一個數(shù)據(jù)庫連接框架,可以認(rèn)為是JDBC的升級版,下面這篇文章主要給大家介紹了關(guān)于mybatis查詢數(shù)據(jù)庫數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04spring boot自定義配置時在yml文件輸入有提示問題及解決方案
自定義一個配置類,然后在yml文件具體配置值時,一般不會有提示,今天小編給大家分享spring boot自定義配置時在yml文件輸入有提示問題,感興趣的朋友一起看看吧2023-10-10struts2實(shí)現(xiàn)文件上傳顯示進(jìn)度條效果
這篇文章主要為大家詳細(xì)介紹了struts2實(shí)現(xiàn)文件上傳顯示進(jìn)度條效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05教你通過B+Tree平衡多叉樹理解InnoDB引擎的聚集和非聚集索引
大家都知道B+Tree是從二叉樹演化而來,在這之前我們來先了解二叉樹、平衡二叉樹、平衡多叉樹,這篇文章主要介紹了通過B+Tree平衡多叉樹理解InnoDB引擎的聚集和非聚集索引,需要的朋友可以參考下2022-01-01教你如何使用Java8實(shí)現(xiàn)菜單樹形數(shù)據(jù)
今天給大家?guī)淼氖顷P(guān)于JAVA的相關(guān)知識,文中圍繞著如何使用Java8實(shí)現(xiàn)菜單樹形數(shù)據(jù)展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06使用Java判定一個數(shù)值是否在指定的開閉區(qū)間范圍內(nèi)
這篇文章主要給大家介紹了關(guān)于使用Java判定一個數(shù)值是否在指定的開閉區(qū)間范圍內(nèi)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2022-09-09