一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java多線程提交按照時間順序獲取線程結果詳解流程

Java多線程提交按照時間順序獲取線程結果詳解流程

2022-03-09 00:36劍客阿良_ALiang Java教程

在工作中是否存在這樣的場景,多個線程提交執行,你不想全部線程執行結束了獲取結果,而是有線程完成返回結果就獲取消費。本文提供該場景的工具類,可以直接用哦

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();
}
}

執行看看

Java多線程提交按照時間順序獲取線程結果詳解流程

OK,先執行結束的線程,先消費。

 

總結

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

如果本文對你有幫助的話,不要吝嗇你的贊,狠狠的甩給我。

Java多線程提交按照時間順序獲取線程結果詳解流程

到此這篇關于Java多線程提交按照時間順序獲取線程結果詳解流程的文章就介紹到這了,更多相關Java 多線程內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://huyi-aliang.blog.csdn.net/article/details/121089542

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99精品视频只99有精品 | 日本动漫打扑克动画片樱花动漫 | 丝瓜茄子绿巨人秋葵榴莲污 | 成人亚洲精品一区 | chinese一bdsmⅹxx| free性丰满hd性欧美人体 | 爱爱调教 | 亚洲国产精品嫩草影院永久 | 亚洲白拍 | 黑帮少爷爱上我第8集最新 荷兰精品女人性hd 和日本免费不卡在线v | 思思99热久久精品在2019线 | 亚洲天堂成人在线 | 四虎影视免费观看 | 国产99er66在线视频 | 亚洲国产综合久久久无码色伦 | 欧美一级欧美一级高清 | 日本精品中文字幕在线播放 | 日本国产高清色www视频在线 | 99r视频在线观看 | 国产精品久久毛片蜜月 | 欧美在线视频一区 | 欧美 变态 另类 人妖班 | 国产精选之刘婷野战 | 女同学用白丝脚玩我的故事 | 国产经典一区 | 午夜神器18以下不能进免费 | 被老头肉至怀孕小说 | 手机在线伦理片 | 俄罗斯伦理片 | 欧美日韩亚洲国内综合网俺 | 久久强奷乱码老熟女 | 精品国产免费一区二区三区 | 国产精品国产色综合色 | 男男视频18免费网站 | 门卫老张和女警花小说 | 骚虎最新网址 | 男同志与动人物zozotv | 国产一区日韩二区欧美三 | 美女一线天 | 大ji吧快给我别停受不了视频 | 美女扒开两腿露出尿口的视频 |