package com.msxf.datasource.thirdpart.service.extface;

import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.*; public class ThreadTest { /**
* 同一个map里面存储了各个水果的数量,
*
* @param args
*/
public static void main(String[] args) throws ExecutionException, InterruptedException { /**
* invokeAny 3个线程中最快的那个会返回,但是其他的也可能都执行完/也可能不执行;
*/
testInvokeAny();
} private static void testInvokeAny() throws ExecutionException, InterruptedException {
ExecutorService executorService = Executors.newSingleThreadExecutor(); Set<Callable<String>> tskSet = new HashSet<>(); tskSet.add(new Callable<String>() {
public String call() throws Exception {
System.out.println("Task 1 ..........running.......");
return "Task 1";
}
});
tskSet.add(new Callable<String>() {
public String call() throws Exception {
System.out.println("Task 2 ..........running.......");
return "Task 2";
}
});
tskSet.add(new Callable<String>() {
public String call() throws Exception {
System.out.println("Task 3 ..........running.......");
return "Task 3";
}
}); String result = executorService.invokeAny(tskSet); System.out.println("result = " + result); executorService.shutdown();
} }

  invokeAny 3个线程中最快的那个会返回,

   但: 其他的2个也可能都执行完/也可能不执行;

ExecutorService的invokeAny方法注意的更多相关文章

  1. ExecutorService的invokeAny方法

    一.此方法获得最先完成任务的结果,即Callable<T>接口中的call的返回值,在获得结果时,会中断其他正在执行的任务 示例代码: import java.util.ArrayList ...

  2. ExecutorService的submit方法使用

    在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动.调度.管理线程的一大堆API了.在Java5以后,通过Executor来启动线程比用Thread的start()更好.在新特征中 ...

  3. ExecutorService的submit方法的坑

    先看一段代码: public Future<?> submit(Runnable task) { if (task == null) throw new NullPointerExcept ...

  4. ExecutorService

    接口 java.util.concurrent.ExecutorService 表述了异步执行的机制,并且可以让任务在后台执行.壹個 ExecutorService 实例因此特别像壹個线程池.事实上, ...

  5. Java并发编程核心方法与框架-ExecutorService的使用

    在ThreadPoolExecutor中使用ExecutorService中的方法 方法invokeAny()和invokeAll()具有阻塞特性 方法invokeAny()取得第一个完成任务的结果值 ...

  6. ExecutorService.invokeAny()和ExecutorService.invokeAll()的使用剖析

    ExecutorService是JDK并发工具包提供的一个核心接口,相当于一个线程池,提供执行任务和管理生命周期的方法.ExecutorService接口中的大部分API都是比较容易上手使用的,本文主 ...

  7. [翻译][Java]ExecutorService的正确关闭方法

    https://blog.csdn.net/zaozi/article/details/38854561 https://blog.csdn.net/z69183787/article/details ...

  8. 线程池 多线程运行结束后 如何关闭? ExecutorService的正确关闭方法

    前言 最近在使用ExecutorService的时候,对于与ExecutorService相关的概念有些迷糊, 加上本身ExecutorService内部的有些方法名在取名上也容易让使用者误解,导致 ...

  9. ExecutorService的execute和submit方法

    三个区别: 1.接收的参数不一样 2.submit有返回值,而execute没有 Method submit extends base method Executor.execute by creat ...

随机推荐

  1. 手把手教你使用 Prometheus 监控 JVM

    概述 当你的 Java 业务容器化上 K8S 后,如果对其进行监控呢?Prometheus 社区开发了 JMX Exporter 来导出 JVM 的监控指标,以便使用 Prometheus 来采集监控 ...

  2. GDB将所有线程堆栈输出到文件

    在调试多线程程序时,经常需要查看线程堆栈信息,如果线程数目过多,每次查看一个线程堆栈,繁琐耗时.下面介绍一种一次性将所有线程堆栈输出到文件的方法. 首先,将gdb attach到调试线程 gdb -p ...

  3. Linux最常用的命令大全

    Linux最常用的命令大全 按功能索引 目录处理命令 ls mkdir pwd cd rmdir cp mv rm 文件处理命令 touch cat tac more less head tail l ...

  4. day34 Pyhton 网络编程

    一今日内容 # 函数 # 面向对象 # 进阶 # 网络编程 4 # 并发编程 6-7 # 概念 # 网络基础 # 局域网的概念 # 交换机和路由器的工作流程 # ip地址 # mac地址 # 子网掩码 ...

  5. df du linux空间清理,查看文件大小

    df -h ,这个命令用于查看服务器空间,运行后的效果图如下: [root@localhost /]# df -h Filesystem Size Used Avail Use% Mounted on ...

  6. git stash功能的使用

    一,git stash的作用: 能够将所有未提交的修改(工作区和暂存区)保存至堆栈中,用于后续恢复当前工作目录 说明:架构森林是一个专注架构的博客,地址:https://www.cnblogs.com ...

  7. docker19.03限制容器使用的内存资源

    一,指定内存大小的参数: [root@localhost liuhongdi]# docker run -idt --name kafka2 --hostname kafka2 -m 200M --m ...

  8. 第十二章 Linux三剑客之老三—grep

    一.Linux grep 命令用于查找文件里符合条件的字符串. Linux系统中的grep命令是一种功能强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.grep全称是Global ...

  9. C# 将dataset数据导出到excel中

    //添加引用 NPOI.dll //添加 using NPOI.HSSF.UserModel; /// <summary> /// 导出数据到Excel /// </summary& ...

  10. Linux运维学习第三周记

    日落狐狸眠冢上 夜归儿女笑灯前 人生有酒须当醉 一滴何曾到九泉 愿醉卧沙场可未有匹夫之勇. 第三周学记 第三周主要学习正则表达式和Shell编程 1.正则表达式基本字符 2.扩展正则表达式 3.gre ...