多线程协作完成任务时用?如IO异步编程?
package thread.pool; import java.util.Random; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.FutureTask; /** * Only proceed if all tasks are completed 1. 当所有任务都执行完成后,做某事 */ public class Concurrent_Callable { public static void main(String[] args) { ExecutorService threadPool = Executors.newFixedThreadPool(3); //使用Future接收任务执行后的结果 Future<Object> future = threadPool.submit(new MyTask("task1")); try { Object result = future.get(); //pass result to another processor System.out.println("Result is :" + result); } catch (InterruptedException | ExecutionException e) { //判断是否特定异常发生了 if(e.getCause() instanceof IllegalStateException) { System.out.println("Random().nextInt(100) % 2 == 0"); } else { e.printStackTrace(); } } threadPool.shutdown(); } } class MyTask implements Callable { private String name; public MyTask(String name) { this.name = name; } public Object call() throws Exception { // doing something here ... Thread.sleep(2000); if(new Random().nextInt(100)%2==0) { throw new IllegalStateException(); } // after task done,return result return name + " Done!"; } }
package thread.pool; import java.util.Random; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorCompletionService; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.FutureTask; /** * Pass task results to other processor as soon as possible or do something else * while tasks are executing 2. 尽快将已经完成任务的结果传递给另外的线程处理 */ public class Concurrent_CallableCompletion { public static void main(String[] args) { //创建线程池 ExecutorService threadPool = Executors.newFixedThreadPool(3); //创建ExecutorCompletionService ExecutorCompletionService<Object> completionService = new ExecutorCompletionService<Object>(threadPool); //提交若干任务到ExecutorCompletionService中 for(int i=1;i<10;i++) completionService.submit(new OtherTask("task"+i)); for(int i=1;i<10;i++) { try { //获取下一个完成的任务,如果没有,则阻塞 Future<Object> future = completionService.take(); Object result = future.get(); //here: pass result to another processor System.out.println("Result is :" + result); } catch (InterruptedException | ExecutionException e) { //判断异常来源,进行特殊处理 if(e.getCause() instanceof IllegalStateException) { System.out.println("Something bad happen! Random().nextInt(100) % 2 == 0"); } else { e.printStackTrace(); } } } threadPool.shutdown(); } } class OtherTask implements Callable { private String name; public OtherTask(String name) { this.name = name; } public Object call() throws Exception { // doing something here ... Thread.sleep(2000); if(new Random().nextInt(100)%2==0) { throw new IllegalStateException(); } // after task done,return result return name + " Done!"; } }
相关推荐
- backport-util-concurrent也实现了Future和Callable接口,尽管在Java 5中它们被引入为标准库的一部分。这些接口允许异步计算并获取结果,Callable可以返回一个结果,而Future则提供了检查任务完成状态和获取结果...
4. **Future** 和 **Callable**:Future代表异步计算的结果,Callable接口则定义了计算任务,可以返回结果并抛出异常。 5. **CountDownLatch** 和 **CyclicBarrier**:用于同步多个线程,CountDownLatch用于一次性...
### Java并发工具包 `java.util.concurrent` 知识点详解 #### 一、引言 随着多核处理器的普及和应用程序复杂度的增加,多线程编程成为了现代软件开发不可或缺的一部分。为了简化并发编程的复杂性,Java 5 引入了 `...
2. **Future和Callable**:`Callable`接口类似`Runnable`,但允许返回结果。`Future`接口表示异步计算的结果,提供检查任务是否完成、获取结果或取消任务的方法。 3. **并发集合**:Java并发工具包提供了一系列线程...
标题中提到了“java.util.concurrent.uml.pdf”,这表明文件是一份Java并发编程工具包java.util.concurrent的UML(统一建模语言)类结构图的PDF格式文件。UML图能够帮助开发者理解Java并发包中的类、接口及其关系,...
2. **java.util.concurrent** 包:这个包是Java并发库的核心,包含了许多并发和线程池相关的类,如ExecutorService、ThreadPoolExecutor、Future和Callable等。ExecutorService是线程池的接口,通过它可以管理和控制...
Java.util.concurrent(JUC)是Java平台中的一个核心包,专门用于处理多线程并发问题。这个包包含了大量的工具类和接口,极大地简化了并发编程的复杂性,提高了程序的性能和可伸缩性。本测试源文件主要是针对JUC并发...
总之,`java.util.concurrent` 提供的工具使得并发编程变得更加容易和高效,是 Java 并发编程的基石,无论是对于初学者还是经验丰富的开发者,理解和掌握这个包都是非常重要的。通过熟练运用这些工具,开发者可以...
Java提供了三种方式用于创建线程,分别是继承java.lang.Thread类、实现java.lang.Runnable接口、应用java.util.concurrent.Callable接口与java.util.concurrent.Future接口。每种方式都有其优缺,需要根据实际工程...
Java中的`util.concurrent.Future`接口是Java并发编程中一个非常重要的概念,它是异步计算结果的代表。在Java多线程环境下,`Future`接口提供了一种方式来获取由其他线程执行的异步任务的结果。它允许你在不阻塞当前...
- `java.util.concurrent.Future`和`java.util.concurrent.Callable`接口用于获取异步计算的结果。 ##### 3. 锁 - `java.util.concurrent.locks`包提供了多种类型的锁,如`ReentrantLock`等。 ##### 4. 信号量 - `...
其次,`Future`和`Callable`接口也是backport-util-concurrent的重要组成部分。它们允许异步计算结果并提供一种方式来获取或检查计算状态。`Future`接口提供了获取结果、取消任务和检查任务是否完成的方法。而`...
6. **Future和Callable接口**:与Java内置的Future和Callable接口类似,但Aduna Commons Concurrent提供了一些增强的实现,使得结果的获取和任务的取消更加灵活。 7. **线程安全的数据结构**:Aduna Commons ...
`java.util.concurrent`(JUC)包是Java标准库提供的一组强大的并发工具,它为开发者提供了丰富的类和接口,帮助简化并发编程。本用户指南将深入探讨这个包中的核心概念和主要类。 1. **线程池**: `java.util....
Callable接口位于`java.util.concurrent`包下,它的主要方法是`call()`,这个方法相当于Runnable的`run()`,但`call()`可以有返回值和抛出异常。当我们需要在线程中执行一个计算任务并获取结果时,Callable就非常...
import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class ExecutorServiceCalculator ...
2. **Future和Callable**:`Future`接口代表一个异步计算的结果,而`Callable`接口用于表示一个带有返回值的任务。这两个接口可以与`ExecutorService`结合使用,以便在后台线程执行任务并在需要时获取结果。 3. **...
2. **Future和Callable**:Callable接口允许我们创建返回值的任务,而Future则用于获取这些任务的结果。FutureTask是Future的一个具体实现,它同时实现了Runnable和Future接口,可以在单个对象中同时表示任务和结果...
- `java.util.concurrent`:包含各种高级并发工具,如`Executor`框架、`Future`接口、`BlockingQueue`等,这些工具可以简化线程池管理、异步结果获取以及线程间通信。 - `java.util.concurrent.atomic`:提供原子...
import java.util.concurrent.Callable; import java.util.concurrent.Future; import java.util.concurrent.Executors; import java.util.concurrent.ExecutorService; import java.util.concurrent....