Java多線程提交按照時間順序獲取線程結(jié)果詳解流程
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);
/**
* 提交多個任務(wù)
* @param tasks 任務(wù)
* @param consumer 結(jié)果消費
* @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é)束的線程,先消費。
總結(jié)
一個姑娘,如果有被人喜歡,而且那個人喜歡的干干凈凈,怎么都是一件美好的事情。
如果本文對你有幫助的話,不要吝嗇你的贊,狠狠的甩給我。

到此這篇關(guān)于Java多線程提交按照時間順序獲取線程結(jié)果詳解流程的文章就介紹到這了,更多相關(guān)Java 多線程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot Retry組件@Recover失效問題解決方法
在使用springboot的retry模塊時,你是否出現(xiàn)過@Recover注解失效的問題呢?不用擔(dān)心,這篇文章就來告訴你解決@Recover失效的辦法,需要的小伙伴可以參考一下2021-11-11
關(guān)于解決雪花算法生成的ID傳輸前端后精度丟失問題
這篇文章主要介紹了關(guān)于解決雪花算法生成的ID傳輸前端后精度丟失問題,雪花算法生成的ID傳輸?shù)角岸藭r,會出現(xiàn)后三位精度丟失,本文提供了解決思路,需要的朋友可以參考下2023-03-03
SpringBoot整合Swagger3生成接口文檔過程解析
這篇文章主要介紹了SpringBoot整合Swagger3生成接口文檔過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-07-07
springBoot下實現(xiàn)java自動創(chuàng)建數(shù)據(jù)庫表
這篇文章主要介紹了springBoot下實現(xiàn)java自動創(chuàng)建數(shù)據(jù)庫表的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
Java應(yīng)用開源框架實現(xiàn)簡易web搜索引擎
本篇文章主要介紹了Java應(yīng)用開源框架實現(xiàn)簡易web搜索引擎,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11

