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(); } }
相关推荐
ExecutorService用于管理和执行线程池中的线程,Callable用于返回某个结果,Future用于获取异步计算的结果。它们之间的紧密相连,共同实现了高效、安全的并发编程。 在实际应用中,我们可以使用ExecutorService、...
### Java多线程-JDK5.0新增线程创建方式 #### 一、新增方式1:实现Callable接口 ##### (1)介绍 自Java 5.0起,为提高线程管理的灵活性与效率,引入了`Callable`接口,这是一种全新的创建线程的方式。与传统的`...
ExecutorService和Future接口也得到了增强,使得多线程编程更加灵活。 Java 1.8还改进了反射API,增加了对默认方法的支持,这使得在运行时动态调用接口的默认方法成为可能。另外,新的MethodHandle和MethodType类...
JDK 1.5引入了`java.util.concurrent`包,提供了许多高级并发工具,如`ExecutorService`、`Future`、`Callable`、`CyclicBarrier`、`Semaphore`等,大大简化了并发编程。 **线程池的概念** 线程池(ThreadPool)是...
另外,还引入了并发包(java.util.concurrent),提供了一组高效的线程管理和同步工具,如ExecutorService、Future和Callable等,大大简化了多线程编程。 **JDK 1.8**是Java发展历程中的一个重要里程碑,引入了...
JDK 1.6在并发编程方面有显著提升,引入了`java.util.concurrent`包,提供了一组高效并发工具类,如`ExecutorService`、`Future`、`Callable`等,简化了多线程编程。此外,`java.lang.ThreadLocal`类也得到了加强,...
例如,`java.util.concurrent`包中添加了许多并发工具类,如ExecutorService、Future、Callable等,使得开发者可以更高效地编写并发程序。此外,Swing和JavaFX库也进行了升级,提供了更好的图形用户界面(GUI)支持...
5. **线程池**:ExecutorService和ThreadPoolExecutor是Java并发编程中常用的线程池管理工具,它们可以帮助优化线程的创建和销毁,提高系统效率。 6. **并发集合**:如ConcurrentHashMap、CopyOnWriteArrayList等,...
创建Callable实例,然后使用ExecutorService提交到线程池,获取Future对象。 - Future对象提供了`get()`方法,可以获取线程执行完毕后的结果。这种方式支持有返回值的多线程编程。 4. 线程状态管理: - Java线程...
Java的并发编程在JDK1.8中得到了加强,包括ExecutorService、Future和Callable接口,以及Semaphore、CyclicBarrier和CountDownLatch等同步工具类。这些工具帮助开发者更有效地管理线程,实现多线程间的协调和同步。 ...
1. **java.concurrent** 包:JDK6大大增强了并发编程的支持,提供了如ExecutorService、Future、Callable等工具,简化了线程管理和任务调度。并发工具类如Semaphore、CyclicBarrier、CountDownLatch等,为多线程协作...
- **JDK1.5线程并发库**:引入了更高级的并发控制机制,如`ExecutorService`、`Callable`、`Future`等,提供了更安全、更高效的多线程解决方案,减少了线程同步和死锁的风险。 ##### 2. 创建线程的两种传统方式 - ...
`Thread`类是线程的基本实现,而`java.util.concurrent`包引入了ExecutorService、Future、Callable等高级并发工具,使得线程管理更为高效且安全。 五、网络编程 `java.net`包提供了网络编程的基础接口和类,如...
2. **并发编程**:Java并发库在JDK1.8中得到进一步增强,包括ExecutorService、Future、Callable等接口和类,以及CountDownLatch、CyclicBarrier、Semaphore等同步工具类,方便开发者进行多线程编程。 3. **Stream ...
ExecutorService、Future、Callable接口,以及synchronized、volatile关键字的实现,都是多线程编程的重点。理解这些源码可以帮助我们编写更高效、更安全的并发代码。 5.IO流:Java的IO系统在1.7版本中已经有了丰富...
7. **并发编程**:Java 1.8的并发API包括ExecutorService、Future、Callable、CyclicBarrier、Semaphore等,它们提供了一套完善的多线程管理和同步机制。 8. **NIO.2**:Java的New I/O 2(NIO.2)引入了Path、Files...
5. **并发编程的改进**:引入了`java.util.concurrent`包,提供了ExecutorService、Future、Callable等高级并发工具类,简化了多线程编程。另外,还增加了Lock接口和ReentrantLock等锁机制,提供更细粒度的锁控制。 ...
11. **并发编程:**ExecutorService、Future、Callable、ThreadLocal、synchronized关键字、volatile关键字等,用于多线程环境中的同步和异步操作。 12. **XML处理:**DOM、SAX、StAX等方式解析和生成XML文档。 13...
- **使用Callable和Future**:对于需要返回结果的任务,可以使用Callable接口替代Runnable接口,并通过Future获取结果。 - **启动线程**:通过调用Thread对象的`start()`方法启动线程,这将调用内部的`run()`方法...
11. **并发编程工具**:如ExecutorService、Future、Callable等,提供了更高级的线程管理和任务执行机制。 12. **NIO(非阻塞I/O)**:Java的异步I/O模型,提高了高并发场景下的性能。 13. **国际化与本地化**:...