ExecutorService实现获取线程返回值

2023-05-16

什么是ExecutorService?

ExecutorService是java.util.concurrent包中的一个线程池实现接口。其有两个实现类:ThreadPoolExecutor 和 ScheduledThreadPoolExecutor。分别用来实现普通线程池和延迟任务线程池。普通线程池通过配置线程池大小,能有效管理线程的调度,在执行大量异步线程时提高程序的性能。延迟任务线程池可控制在给定多长的延迟后执行线程。想要实现获取线程的返回值,可以通过ThreadPoolExecutor及其子类管理线程。

实现带返回值的Callable子类

创建一个线程类实现Callable接口,重写call方法,其中call方法相当于Thread子类中的run方法。其内容为线程运行时所执行的业务。

ThreadWithCallable.java

package thread;

import java.util.concurrent.Callable;

/**
 *  一个包含返回值的线程类
 * @author xiezd 2018-01-14 21:40
 *
 */
public class ThreadWithCallback implements Callable{
    private int number;
    public ThreadWithCallback(int number){
        this.number = number;
    }
    //相当于Thread的run方法
    @Override
    public Object call() throws Exception {
        long begin = System.currentTimeMillis();
        int index = (int)(Math.random() * 99999999);
        int result = number;
        //随便写的
        for (int i = 1; i < index; i++) {
            result = (result / i ) * index;
        }
        long end = System.currentTimeMillis();
        return "计算数值为" + number + "的线程,花费:" + (end - begin) + "毫秒。";
    }
}

创建线程池测试

编写一个测试类:

  1. 通过Excutors工厂类获取一个固定大小的线程池对象。
  2. 调用线程池对象的submit方法,参数为一个线程对象,返回值为Future对象。
  3. 调用Future对象的get方法获取线程返回值。
  4. 关闭线程池。

App.java

package thread;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

/**
 * @author xiezd 2018-01-14 21:49
 */
public class App {
    public static void main(String[] args) {
        ExecutorService executors = Executors.newFixedThreadPool(10);
        try {
            /* 启动线程时会返回一个Future对象。
             * 可以通过future对象获取现成的返回值。
             * 在执行future.get()时,主线程会堵塞,直至当前future线程返回结果。
             */
            Future future1 = executors.submit(new ThreadWithCallback(20));
            Future future2 = executors.submit(new ThreadWithCallback(30));
            System.out.println(future1.get());
            System.out.println(future2.get());

        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }finally {
            executors.shutdown();
        }
    }
}

注:在future调用get方法时,主线程会阻塞(sè),直到该线程执行完毕返回对象了只有才继续运行。

如果要执行n个线程,可以把future放入Set集合中,在所有线程都启动完毕后,遍历Set取出返回值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ExecutorService实现获取线程返回值 的相关文章

  • 解决OpenCV在Python中无法使用cv2.face的问题

    1 包不完整 只用pip install opencv python 装的依赖之后第二个 xff0c 这样里边没有face模块 xff0c 需要装第一个依赖才行 pip install opencv contrib python 2 包完整
  • 生日礼物

    01背包 Problem Description 一对双胞胎兄妹同一天过生日 xff0c 这一天 xff0c 他们的朋友给他俩送来了礼物 xff0c 每个人送的礼物都是2本书 xff0c 一本给哥哥 xff0c 一本给妹妹 xff0c 但没
  • 砝码称重

    多重背包 Problem Description 设有1g 2g 3g 5g 10g 20g的砝码各若干枚 xff08 其总重 lt 61 1000 xff09 xff0c 要求 xff1a 输入方式 xff1a a1 a2 a3 a4 a
  • Piggy-Bank

    完全背包 Problem Description Before ACM can do anything a budget must be prepared and the necessary financial support obtain
  • Edit Distance(LeetCode)

    Given two words word1 and word2 find the minimum number of steps required to convert word1 to word2 each operation is co
  • OSI,TCP/IP,五层协议的体系结构,以及各层协议简介

    OSI分层 xff08 7层 xff09 xff1a 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层 TCP IP分层 xff08 4层 xff09 xff1a 网络接口层 网际层 运输层 应用层 五层协议 xff08 5层 x
  • IP地址的分类,及子网掩码,网络号,主机号

    A类地址 xff1a 以0开头 xff0c 第一个字节范围 xff1a 1 127 xff08 1 0 0 0 127 255 255 255 xff09 xff1b B类地址 xff1a 以10开头 xff0c 第一个字节范围 xff1a
  • 了解集线器,调制解调器,交换机、路由器、网关的概念,并知道各自的用途

    集线器 集线器是对网络进行集中管理的重要工具 xff0c 像树的主干一样 xff0c 它是各分支的汇集点 xff0c 它的实质是一个中继器 xff0c 而中继器的主要功能是对接收到的信息进行再生放大 xff0c 以扩大网络的传输距离 简单点
  • 并查集

    并查集作用 xff1a 1 判断两节点是否联通 2 连接两个节点 xff0c 使之联通 并查集数据结构 xff1a 多路树结构 例 xff1a 存储结构 xff1a 数组模拟 xff1a 设数组为pre i i为当前节点 xff0c pre
  • 袋鼠过河

    一只袋鼠要从河这边跳到河对岸 xff0c 河很宽 xff0c 但是河中间打了很多桩子 xff0c 每隔一米就有一个 xff0c 每个桩子上都有一个弹簧 xff0c 袋鼠跳到弹簧上就可以跳的更远 每个弹簧力量不同 xff0c 用一个数字代表它
  • 最短路径算法(Dijkstra)

    一 前言 最短路径算法 xff0c 顾名思义就是求解某点到某点的最短的距离 消耗 费用等等 xff0c 有各种各样的描述 xff0c 在地图上看 xff0c 可以说是图上一个地点到达另外一个地点的最短的距离 比方说 xff0c 我们把地图上
  • linux安装nodejs【详细教程】

    一 下载node包 先看一下官网 https nodejs org en download 下载 Node js 中文网 nodejs cn 二 将node包放到linux上 1 解压 xff1a tar xvf node v14 15 1
  • 红明谷杯-SMU

    2021红明谷杯安全意识赛 一 单项选择题 1 以下不属于采用密码技术对数据本身进行保护的是 xff08 xff09 A 防火墙技术 B 使用现代加密算法对数据进行加密以获得机密性 C 采用数字签名算法确保数据源的可靠性 D 采用杂凑算法和
  • tcp窗口滑动以及拥塞控制

    转自 xff1a http blog chinaunix net uid 26275986 id 4109679 html TCP协议作为一个可靠的面向流的传输协议 xff0c 其可靠性和流量控制由滑动窗口协议保证 xff0c 而拥塞控制则
  • 小胖的水果(lcs)

    描述 xuzhenyi到大同水果店去买水果 xff0c 但老板huyichen告诉他每次只能买一种 xff0c 但是xuzhenyi想吃两种 xff0c 于是在讨价还价之后 xff0c huyichen说只要xuzhenyi能把他想要的两种
  • 神秘的咒语(Lcis)

    描述 身为拜月教的高级间谍 xff0c 你的任务总是逼迫你出生入死 比如这一次 xff0c 拜月教主就派你跟踪赵灵儿一行 xff0c 潜入试炼窟底 据说试炼窟底藏着五行法术的最高法术 xff1a 风神 xff0c 雷神 xff0c 雪妖 x
  • 合唱队形(LIS)

    描述 N位同学站成一排 xff0c 音乐老师要请其中的 N K 位同学出列 xff0c 使得剩下的K位同学排成合唱队形 合唱队形是指这样的一种队形 xff1a 设K位同学从左到右依次编号为1 xff0c 2 xff0c K xff0c 他们
  • 二分图匹配

    二分图匹配 xff0c 自然要先从定义入手 xff0c 那么二分图是什么呢 xff1f 二分图 xff1a 二分图又称作二部图 xff0c 是图论中的一种特殊模型 设G 61 V E 是一个无向图 xff0c 如果顶点V可分割为两个互不相交
  • 内存管理

    概念 内存管理 Memory Management 是操作系统设计中最重要和最复杂的内容之一 虽然计算机硬件一直在飞速发展 xff0c 内存容量也在不断增长 xff0c 但是仍然不可能将所有用户进程和系统所需要的全部程序和数据放入主存中 x
  • Android 二级图片缓存,图片优化,图片异步加载框架设计

    简介 从用户角度上看对上手机流量的关心 xff0c 一张图片1 4M 如果每次都请求网络加载 xff0c 一张重复的图片却要加载多次很容易消耗特别多的流量 从android平台机制上 xff0c android 移动端本身内存就小 xff0

随机推荐

  • 秋招面试经验分享-阿里,cvte,迅雷,网龙,美团,已拿Offer

    什么是秋招 针对秋招一般是在9 10月份 xff0c 到11月份后还在招聘的公司就很少了 xff0c 在7 8月份一般都会有秋招内推 关于秋招内推可以找自己认识的学长学姐或论坛上的某公司的职员进行内推 xff0c 这个其实牛客网上在7 8月
  • Get新技能学习 android studio git-github

    连接git 没有下载git的需要先下载 xff0c 下载渠道直接QQ软件中就有 下载完后 xff0c 选择路径进行连接 连接GitHub 记得输入账号密码哦 xff01 创建库 上传完后就可以在github上project中看到啦 点击它
  • 斯坦福大学公开课IOS 7学习笔记 (1)

    斯坦福大学公开课IOS 7 xff08 1 xff09 ios 架构 core OS Core Services Media Cocoa Touch Core OS OSX Kernel Unix OS Power Management M
  • Linux+CentOS安装Google安装包,缺少依赖文件,解决办法

    Linux 43 CentOS安装Google安装包 xff0c 缺少依赖文件 安装时主要有三个依赖文件检测失败 xff1a libappindicator3 so 1 liberation fonts和libvulkan so 1 xff
  • OC 协议与代理

    协议 定义 oc的协议有点类似java中的接口 xff0c 当某个类使用也该协议就必须实现协议中所定义的方法 xff0c 实际上不定义也不会报错 xff0c 但会发出警告 xff0c 在代码运行中如果没有实现协议中的方法 xff0c 那么就
  • OC中的集合

    参考博客 xff1a http blog csdn net hierarch lee article details 49834151 简介 在Objective C中的集合类中主要包括不可变的数组 NSArray 可变的数组 NSMuta
  • Windows Server 2016 安装步骤

    目录 1 1准备操作 1 2 开始安装 1 3 系统初始操作 1 4 附言 1 1准备操作 准备工具 xff1a VMware Workstation xff0c Windows Server 2016镜像 本教程里所展示的VMware版本
  • Windows Server 2016 文件操作系统 跨区卷 镜像卷 RAID5卷 ISCSI设置

    目录 简述 前言 说明 正文1 创建跨区卷 1 2 创建镜像卷 1 3 创建RAID5卷 2 使用存储池新建mirror布局的磁盘 3 ISCSI创建卷 简述 在Windows Server系统的各个版本中 xff0c 有5种卷类型 xff
  • Windows Server 2016 域控管理服务的安装

    目录 1 克隆虚拟机 2 安装域服务 3 客户机加入域 4 图形化创建OU xff08 组织单位 xff09 5 命令行添加组 6 脚本添加用户 今天要给大家介绍的Windows Server 下的域控管理服务的安装 什么事域控管理服务呢
  • Windows组策略管理

    组策略的管理一般是属于域的应用 xff0c 组策略有什么作用呢 xff1f 组策略可以在域控环境中 xff0c 实现用户以及计算机的统一行为策略管理 xff0c 比如 xff0c 统一大家的桌面背景 xff0c 统一主题样式 xff0c 统
  • Windows Server 2016 DFS的应用步骤

    目录 介绍 任务目标 xff1a 准备工作 1 分别安装DFS复制和DFS命名空间 2 创建共享文件夹 3 创建命名空间服务器 4 创建复制文件夹 5 访问命名空间路径 6 创建卷影副本 介绍 DFS是一种共享资源的技术机制 xff0c 让
  • Windows Server 2016 DNS服务器的设置

    什么是DNS呢 xff1f DNS的全称是Domain Name System xff0c 在计算机网络中 xff0c 主机与主机之间的通信主要是通过IP地址进行通信的 xff0c 但是IP地址对于我们人类来说记忆难度比较大 xff0c 为
  • 《Java并发编程实战》中关于allowCoreThreadTimeOut描述的个人见解

    最近在看 Java并发编程实战 这本书 xff0c 的确有很大的收获 看到8 3 1节关于线程的创建与销毁时 xff0c 底下的注释提到了ThreadPoolExecutor中allowCoreThreadTimeOut的用法 我认为表述有
  • Linux centos8 ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)

    如上文 xff0c 然后查怎么免密登录都是mysql8以下的版本 做法 xff1a 在Linux上跳过密码登录MySQL报错 bash mysqld safe command not found 执行命令mysqld user 61 mys
  • MAC 下屏蔽特定网址

    只需要在Host中进行操作即可 参考 教你两步在mac下屏蔽某指定网站 简书 由于某种原因 xff0c 我们希望在网络正常的情况下屏蔽掉一些网站 xff0c 今天我就教大家两步实现屏蔽特定网站的方法 xff1a 1 xff0c 找到host
  • 完美解决 No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android

    问题描述 好久之前的一个Android项目 xff0c 最近需要重构一下 因为Android Studio的开发环境以及Gradle的版本等等都进行了一定的更新 xff0c 于是导入Project以后 xff0c 出现了报错 xff1a N
  • ftp共享文件夹设置说明

    第一步 xff0c 在 计算机 文件夹中 xff0c 右键空白处 xff0c 然后点击 添加一个网络位置 在打开的页面中输入用户名 xff1a sale read 密码 xff1a lanmao2019 xff0c 记得勾选 保存密码 xf
  • Ubuntu安装Python3.6教程

    首先拉取远程仓库 sudo add apt repository ppa jonathonf python 3 6 这个过程可能会网络超时 这个时候 再来一遍 xff0c 如果还有问题 xff0c 参考https mp csdn net p
  • 小米pro加装固态硬盘以及拆机方法

    昨天买了一块512G的固态硬盘 xff0c 然后准备给pro xff08 mx150版 xff09 换上去 xff0c 发现要拆开后盖还挺难的 xff0c 于是一顿百度并没有什么结果 xff0c 转而咨询客服 xff0c 然后顺利解决了 x
  • ExecutorService实现获取线程返回值

    什么是ExecutorService ExecutorService是java util concurrent包中的一个线程池实现接口 其有两个实现类 xff1a ThreadPoolExecutor 和 ScheduledThreadPo