假如有Thread1、Thread2、ThreaD3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?
一般情况,我们实现多线程都是Thread或者Runnable(后者比较多),但是,这两种都是没返回值的,所以我们需要使用callable(有返回值的多线程)和future(获得线程的返回值)来实现了。
- /**
- * 假如有Thread1、Thread2、ThreaD3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?
- */
- public class TestThread {
- public static void main(String[] args) {
- ThreadCount tc = null;
- ExecutorService es = Executors.newCachedThreadPool();//线程池
- CompletionService<Integer> cs = new ExecutorCompletionService<Integer>(es);
- for(int i=0;i<4;i++){
- tc = new ThreadCount(i+1);
- cs.submit(tc);
- }
- // 添加结束,及时shutdown,不然主线程不会结束
- es.shutdown();
- int total = 0;
- for(int i=0;i<4;i++){
- try {
- total+=cs.take().get();
- } catch (InterruptedException e) {
- e.printStackTrace();
- } catch (ExecutionException e) {
- e.printStackTrace();
- }
- }
- System.out.println(total);
- }
- }
- class ThreadCount implements Callable<Integer>{
- private int type;
- ThreadCount(int type){
- this.type = type;
- }
- @Override
- public Integer call() throws Exception {
- if(type==1){
- System.out.println("C盘统计大小");
- return 1;
- }else if(type==2){
- Thread.sleep(20000);
- System.out.println("D盘统计大小");
- return 2;
- }else if(type==3){
- System.out.println("E盘统计大小");
- return 3;
- }else if(type==4){
- System.out.println("F盘统计大小");
- return 4;
- }
- return null;
- }
- }
ps:一个需要注意的小细节,cs.take.get()获取返回值,是按照完成的顺序的,即上面案例返回顺序是CEFD
更多详细相关,请戳我
假如有Thread1、Thread2、ThreaD3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?相关推荐
- 假如有Thread1、Thread2、ThreaD3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?...
有两种方法: 第一种方法: 一般情况,我们实现多线程都是Thread或者Runnable(后者比较多),但是,这两种都是没返回值的,所以我们需要使用callable(有返回值的多线程)和future( ...
- 关于假如有Thread1、Thread2、Thread3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?
最近看了一些面试题,然后发现这个频率比较高,然后就细心地了解下 在这里主要想讲解三种方法(毕竟还有其他方法): 一.使用join方法: 这个是辅助类: package com.com.aaa.five ...
- 四个角不是直角的四边形_四边形的特点是有四条直的边和四个直角对吗
四边形的特点是有四条直的边和四个直角对吗2020-12-14 10:28:21文/董玉莹 四边形都有四条直的边,四个直角.这个命题是错误的.由不在同一直线上的四条线段依次首尾相接围成的封闭的平面图形叫 ...
- 缇娜机器人_《无主之地2:小缇娜的龙堡之袭》四条龙boss打法攻略
无主之地2是一款相对比较完美的射击类游戏,在这款游戏里面,玩家可以体验到与传统射击游戏不一样的体验,高自由度的设置,让这款游戏的生命力大大增强. 四条龙boss打法攻略 boss是四只飞龙,分别是火属 ...
- 四节传送带plc梯形图_基于PLC的四节传送带设计.ppt
基于PLC的四节传送带设计 2015 基于PLC的四节传送带设计 作者: 研究背景与研究意义 跟着科学技术的快速飞跃,不管是在日常生活中还是在工农业,PLC都拥有十分广泛的使用PLC的优点是不言而喻的 ...
- Nature:给博士研究生的四条箴言Four golden lessons,颜宁推荐
导语 史蒂文·温伯格(Steven Weinberg,1933年5月3日-),生于纽约,美国物理学家,1979年获诺贝尔物理学奖. <Four golden lessons>是美国物理学家 ...
- 颜宁强烈推荐:给研究生的四条金玉良言
点击上方"AI遇见机器学习",选择"星标"公众号 原创干货,第一时间送达 转自:岩之有理 史蒂文·温伯格(Steven Weinberg,1933年5月3日-) ...
- 画蛇添足:四条管脚的电位器
01四端电位器 电位器(potentiometer)也被称作滑动变阻器(rheostat)是一个机械电子器件,通常具有三个端口,即左右两个固定端以及中间的滑动端. 两个固定端连接在 一个由电阻丝.碳膜 ...
- Nature:给博士研究生的四条箴言Four golden lessons,颜宁:写的真好!
史蒂文·温伯格(Steven Weinberg,1933年5月3日-),生于纽约,美国物理学家,1979年获诺贝尔物理学奖. <Four golden lessons>是美国物理学家.诺贝 ...
最新文章
- js心跳间隔怎么确定_外墙瓷砖渗水怎么处理的?施工步骤和方法都在这啦
- 微众WeCross 跨链平台(3)交易流程
- 程序员绩效总结_闲聊程序员的绩效考核
- P1582 倒水(二进制)
- hihocoder 1015 : KMP算法(kmp)
- android ButterKnife的简单使用
- windows cmd编辑文本
- python 灰色系统预测GM
- mysql poolsize_thread_pool_size的调整
- opencms内容管理入门指南pdf_企业微信管理员训练营回顾(三) | 企业微信高效协作入门指南...
- Java异常处理学习笔记(抛出、捕获、finally、异常传播、NPE、断言、日志)
- I9 9900K线程_收藏党抓紧了!英特尔停产i9-9900K特色包装,只因运输太浪费
- php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
- PAT-求特殊方程的正整数解(简单编程题)
- 大型网站之网站静态化(综合篇)
- python+django高校志愿者活动报名系统vue+elementui
- directives(Directives UE 93 42 CEE)
- java找出字符串出现最多的字符,JAVA_找出输入的字符串中出现次数最多的字符
- 个人——网页设计之设计步骤及思考
- 什么是MD5 什么是SHA-1 如何校验这些Hash
热门文章
- linux生成的pdf文件,把LINUX MAN PAGE生成为PDF文件的脚本
- 用Visual Studio 2008编写Win32汇编程序
- Ubuntu 服务器设置软件多用户访问
- jzoj4313 电话线铺设(最小生成树+最近公共祖先)
- Django day17 博客项目(一)
- Java提高篇——静态代码块、构造代码块、构造函数以及Java类初始化顺序
- java 蓝桥杯 石子游戏(题解)
- shell支持loop吗_Shell脚本case语句和loop语句,与,循环
- centos8 配置 dns_如何在Ubuntu 18.04上设置DNS名称服务器 | linux资讯
- 程序员c语言简历,程序员的简历该怎么写?当然是程序!