`

JDK中ExecutorService,Callable,Future对线程的支持

阅读更多

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

 

 

1
0
分享到:
评论

相关推荐

    详解JDK中ExecutorService与Callable和Future对线程的支持

    ExecutorService用于管理和执行线程池中的线程,Callable用于返回某个结果,Future用于获取异步计算的结果。它们之间的紧密相连,共同实现了高效、安全的并发编程。 在实际应用中,我们可以使用ExecutorService、...

    Java多线程-JDK5.0新增线程创建方式

    ### Java多线程-JDK5.0新增线程创建方式 #### 一、新增方式1:实现Callable接口 ##### (1)介绍 自Java 5.0起,为提高线程管理的灵活性与效率,引入了`Callable`接口,这是一种全新的创建线程的方式。与传统的`...

    jdk1.8 中文 有道翻译版

    ExecutorService和Future接口也得到了增强,使得多线程编程更加灵活。 Java 1.8还改进了反射API,增加了对默认方法的支持,这使得在运行时动态调用接口的默认方法成为可能。另外,新的MethodHandle和MethodType类...

    jdk1.5 线程并发与线程池的使用

    JDK 1.5引入了`java.util.concurrent`包,提供了许多高级并发工具,如`ExecutorService`、`Future`、`Callable`、`CyclicBarrier`、`Semaphore`等,大大简化了并发编程。 **线程池的概念** 线程池(ThreadPool)是...

    JDK中文版API

    另外,还引入了并发包(java.util.concurrent),提供了一组高效的线程管理和同步工具,如ExecutorService、Future和Callable等,大大简化了多线程编程。 **JDK 1.8**是Java发展历程中的一个重要里程碑,引入了...

    jdk1.6中文API

    JDK 1.6在并发编程方面有显著提升,引入了`java.util.concurrent`包,提供了一组高效并发工具类,如`ExecutorService`、`Future`、`Callable`等,简化了多线程编程。此外,`java.lang.ThreadLocal`类也得到了加强,...

    jdk6纯净版下载

    例如,`java.util.concurrent`包中添加了许多并发工具类,如ExecutorService、Future、Callable等,使得开发者可以更高效地编写并发程序。此外,Swing和JavaFX库也进行了升级,提供了更好的图形用户界面(GUI)支持...

    多线程精品资源--java-study 是本人学习Java过程中记录的一些代码!从Java基础的数据类型、jdk1..zip

    5. **线程池**:ExecutorService和ThreadPoolExecutor是Java并发编程中常用的线程池管理工具,它们可以帮助优化线程的创建和销毁,提高系统效率。 6. **并发集合**:如ConcurrentHashMap、CopyOnWriteArrayList等,...

    java多线程.pdf

    创建Callable实例,然后使用ExecutorService提交到线程池,获取Future对象。 - Future对象提供了`get()`方法,可以获取线程执行完毕后的结果。这种方式支持有返回值的多线程编程。 4. 线程状态管理: - Java线程...

    JDK1.8中文API.rar

    Java的并发编程在JDK1.8中得到了加强,包括ExecutorService、Future和Callable接口,以及Semaphore、CyclicBarrier和CountDownLatch等同步工具类。这些工具帮助开发者更有效地管理线程,实现多线程间的协调和同步。 ...

    JDK6API中文手册

    1. **java.concurrent** 包:JDK6大大增强了并发编程的支持,提供了如ExecutorService、Future、Callable等工具,简化了线程管理和任务调度。并发工具类如Semaphore、CyclicBarrier、CountDownLatch等,为多线程协作...

    张孝祥Java多线程与并发库高级应用笔记

    - **JDK1.5线程并发库**:引入了更高级的并发控制机制,如`ExecutorService`、`Callable`、`Future`等,提供了更安全、更高效的多线程解决方案,减少了线程同步和死锁的风险。 ##### 2. 创建线程的两种传统方式 - ...

    JDK6API中文参考手册[沈东良制]

    `Thread`类是线程的基本实现,而`java.util.concurrent`包引入了ExecutorService、Future、Callable等高级并发工具,使得线程管理更为高效且安全。 五、网络编程 `java.net`包提供了网络编程的基础接口和类,如...

    JDK1.8 API帮助文档.rar

    2. **并发编程**:Java并发库在JDK1.8中得到进一步增强,包括ExecutorService、Future、Callable等接口和类,以及CountDownLatch、CyclicBarrier、Semaphore等同步工具类,方便开发者进行多线程编程。 3. **Stream ...

    jdk1.7源代码

    ExecutorService、Future、Callable接口,以及synchronized、volatile关键字的实现,都是多线程编程的重点。理解这些源码可以帮助我们编写更高效、更安全的并发代码。 5.IO流:Java的IO系统在1.7版本中已经有了丰富...

    java jdk api 1.8048最新 中文 高清 CHM版

    7. **并发编程**:Java 1.8的并发API包括ExecutorService、Future、Callable、CyclicBarrier、Semaphore等,它们提供了一套完善的多线程管理和同步机制。 8. **NIO.2**:Java的New I/O 2(NIO.2)引入了Path、Files...

    jdk 1.6 带索引 api

    5. **并发编程的改进**:引入了`java.util.concurrent`包,提供了ExecutorService、Future、Callable等高级并发工具类,简化了多线程编程。另外,还增加了Lock接口和ReentrantLock等锁机制,提供更细粒度的锁控制。 ...

    jdk 1.8 api 带完整目录索引中英文版chm

    11. **并发编程:**ExecutorService、Future、Callable、ThreadLocal、synchronized关键字、volatile关键字等,用于多线程环境中的同步和异步操作。 12. **XML处理:**DOM、SAX、StAX等方式解析和生成XML文档。 13...

    Java线程 高级使用

    - **使用Callable和Future**:对于需要返回结果的任务,可以使用Callable接口替代Runnable接口,并通过Future获取结果。 - **启动线程**:通过调用Thread对象的`start()`方法启动线程,这将调用内部的`run()`方法...

    java中文翻译版jdk帮助文档

    11. **并发编程工具**:如ExecutorService、Future、Callable等,提供了更高级的线程管理和任务执行机制。 12. **NIO(非阻塞I/O)**:Java的异步I/O模型,提高了高并发场景下的性能。 13. **国际化与本地化**:...

Global site tag (gtag.js) - Google Analytics