1、代码背景:
假如有Thread1、Thread2、Thread3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?
2、代码:
统计“盘子”大小的代码,此处实现jdk中的Callable接口,
package com.wang.test.concurrent; import java.util.concurrent.Callable; public class Task1 implements Callable<Integer> { private int x; private int y; public Task1(int x, int y) { this.x = x; this.y = y; } @Override public Integer call() throws Exception { return x*y; } }
统计汇总的代码,也是实现jdk中的Callable接口,
package com.wang.test.concurrent; import java.util.concurrent.Callable; public class Task2 implements Callable<Integer> { private int x; private int y; private int q; private int w; public Task2(int x, int y, int q, int w) { this.x = x; this.y = y; this.q = q; this.w = w; } @Override public Integer call() throws Exception { return x + y + q + w; } }
客户端:使用JDK中Executors.newFixedThreadPool方法创建ExecutorService,ExecutorService的submit方法接收Callable接口的实现,JDK内部将弄成线程处理,使用Future接收submit方法的返回值,当future调用get方法时,如果线程还没有执行完,程序阻塞在这里,知道线程执行完。
package com.wang.test.concurrent; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class Client { public static void main(String[] args) throws Exception { ExecutorService pool = Executors.newFixedThreadPool(4); Task1 t1 = new Task1(1,2); Task1 t2 = new Task1(23,34); Task1 t3 = new Task1(23,456); Task1 t4 = new Task1(3,33); Future<Integer> f1 = pool.submit(t1); Future<Integer> f2 = pool.submit(t2); Future<Integer> f3 = pool.submit(t3); Future<Integer> f4 = pool.submit(t4); //Future调用get方法时,如果线程还没有执行完,程序阻塞在这里 Task2 t5 = new Task2(f1.get(), f2.get(), f3.get(), f4.get()); Future<Integer> f5 = pool.submit(t5); System.out.println(f5.get()); pool.shutdown(); } }
相关推荐
主要介绍了详解JDK中ExecutorService与Callable和Future对线程的支持的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
大家都知道Runnable和Callable接口都可以作为其他线程执行的任务,...这个例子并不摘自JDK中Callable接口源码,只是提供一种可行方案,仅供参考!该Demo解压、导入到开发环境即可,测试入口为test包下的MainTest.java
JAVA线程总结,包含线程池,显示使用线程实现异步编程,基于JDK中的Future实现异步编程,JDK中的FutureTask等
对java多线程进行了全面的总结,包括了JDK 5的新特性。
JDK5中的多线程并发库.doc 描述了JDK多线程的并发
JVM 已经进行了改进,允许类利用硬件级别支持并发,并且提供了一组丰富的新并发构造块,使开发并发应用程序更加容易。 <br>本教程将介绍 JDK 5.0 提供的用于并发的新实用程序类,并通过与现有并发原语...
JDK5中的多线程并发库
jdk中线程安全的集合类.docx
JDK1.8中文文档 JDK1.8中文 jkd8中文文档 JDK中文版 标准的API规范文档,谷歌中文翻译 全翻译
通过接口java.util.concurrent.Callable 的使用 实现线程的启用,程序为一个main的例子,可以直接运行(jdk1.5 以上版本)
下载后直接去本机jdk目录里替换jdk中的src.zip 再打开idea就能看到中文版的源码注释 示例 https://blog.csdn.net/a7459/article/details/106495622
JDK21的虚拟线程,不需要操作系统的原生支持,可以在没有物理机的情况下运行,极大地降低了线程的创建和管理开销。 普通线程的实现方式 普通线程需要操作系统的原生支持,它的创建和管理都需要消耗一定的系统资源,...
在Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用Runnable接口时需要建立一个Thread实例。因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例。
jdk8中文说明文档_CHM.zip jdk1.8文档 jdk1.8说明文档 官方直接翻译
jdk中文文档,积分便宜你的不二选择, jdk中文文档,积分便宜你的不二选择, jdk中文文档,积分便宜你的不二选择
JDK 1.8中文API文档
jdk8中文手册
JDK11安装包,JDK11安装包JDK11安装包,JDK11安装包JDK11安装包,JDK11安装包JDK11安装包,JDK11安装包JDK11安装包,JDK11安装包JDK11安装包,JDK11安装包JDK11安装包,JDK11安装包JDK11安装包,JDK11安装包JDK11...
支持JDK1.8的Android 代码混淆包。 只需要替换lib目录下的资源
JAVA设计模式在JDK中的应用JAVA设计模式在JDK中的应用 各种设计模式在JDK当中使用的地方 方便分析源码