/**
* Future和Callable的使用
*/
public static void main(String[] args) {
ExecutorService service = Executors.newSingleThreadExecutor();
Future<String> future = service.submit(new Callable<String>() {
@Override
public String call() throws Exception {
Thread.sleep(2000);
return "hello";
}
});
System.out.println("等待结果");
try {
//等待1秒得不到结果,就会抛异常
//System.out.println("取得结果=" + future.get(1, TimeUnit.SECONDS));
//也可以不设置时间,一直等
System.out.println("取得结果=" + future.get());
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("程序结束");
}
/**
* 提交一组任务,那个任务先完成,就先返回
*/
public static void main(String[] args) {
ExecutorService threadPool = Executors.newCachedThreadPool();
CompletionService<Integer> service = new ExecutorCompletionService<Integer>(threadPool);
for (int i = 1; i <= 10; i++) {
final int seq = i;
service.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
int time = new Random().nextInt(5000);
Thread.sleep(time);
return seq;
}
});
}
for (int i = 1; i <= 10; i++) {
try {
Future<Integer> future = service.take();
System.out.println(future.get());
} catch (Exception e) {
e.printStackTrace();
}
}
}
相关推荐
使用Future和CompletionService可以实现异步计算和非阻塞的任务调用,并可以实时获取多线程运行结果。这对于Java编程中的多线程编程非常重要。 知识点: 1. 使用Future接口来实现异步计算和非阻塞的任务调用。 2. ...
"浅谈Java多线程处理中Future的妙用" 在Java多线程处理中,Future是一个非常重要的概念,它可以帮助我们更好地...使用Future和CompletionService可以帮助我们更好地处理并发任务,并且可以提高系统的性能和可靠性。
除了多线程,还包括线程池的使用(ExecutorService,ThreadPoolExecutor),并发工具类(如Future, Callable, CompletionService),以及并发设计模式的应用。 7. **Spring框架**: 了解依赖注入、AOP(面向切面...
2. `Runnable`或`Callable`: 这些是任务的实现,`Runnable`不返回结果,而`Callable`可以返回一个`Future`对象,包含任务的执行结果。 3. `submit()`方法:用于向`ExecutorService`提交任务,如果任务是`Callable`...
`FutureTask`类实现了`Future`和`Runnable`,可以用来包装`Callable`任务并提交给`ExecutorService`。 标签中提到的“源码”意味着深入理解Executor框架的实现原理是重要的。例如,理解`ThreadPoolExecutor`如何...
与直接使用`ExecutorService`不同的是,我们不是通过`Future.get()`方法阻塞等待结果,而是使用`CompletionService`的`take()`方法来获取已完成任务的第一个结果,这将返回一个`Future`对象,从中我们可以获取任务的...
在实际应用中,通常结合`Callable`接口使用,因为`Callable`的`call()`方法可以返回一个结果,比无返回值的`Runnable`更适合组装结果。 在进行结果组装时,可以使用`CompletionService`,它是一个接口,扩展了`...
ExecutorService是Executor的一个子接口,增加了submit方法,允许提交Callable和Runnable任务,并返回一个Future对象,表示异步计算的结果。submit方法有两种形式,一种接受Runnable参数并返回一个Future,另一种...
`TestCompletionService.java`可能展示了如何结合`ExecutorService`和`Future`来使用`CompletionService`。 4. **ScheduledThreadPoolExecutor**:这个类扩展了`ThreadPoolExecutor`,增加了定时和周期性执行任务的...
在Java中,通常通过Future和Callable接口实现异步计算,或者使用ExecutorService和CompletionService来管理和控制异步任务。 三、ExecutorService与ThreadPoolExecutor ExecutorService是Java并发框架中的核心接口...
对于那些具有数据依赖关系或者需要返回结果的任务,Java提供了Callable接口和Future接口。Callable任务可以有返回值,而Future则用于获取Callable任务的结果。这种方式使得异步计算结果的获取成为可能。 并行运行类...
Executor框架包括了Executor、ExecutorService、CompletionService、Future、Callable等接口和类。Executors则是Executor框架的一个工具类,用于创建不同类型的线程池。 在实际应用中,线程池的使用场景广泛,例如...
介绍`CompletionService`接口,以及如何使用它来管理异步任务的执行和结果。 - **第26章:使用ExecutorService停止线程服务** 讲解如何通过`shutdown`和`shutdownNow`方法来停止`ExecutorService`,并确保线程...
5. Future和Callable接口:Callable接口允许创建返回值的任务,而Future接口代表Callable任务的结果,并提供检查任务是否完成、获取结果、取消任务等方法。 6. Atomic类:提供了一组原子操作的类,如AtomicInteger...
此外,Java并发API(java.util.concurrent)提供了一些高级工具,如ExecutorService、Future、Callable和CompletionService,它们简化了多线程编程并提高了性能。 - ExecutorService允许我们创建线程池,管理和控制...
9)已完成任务队列CompletionService 36 10)计时器CountDownLatch 37 11)周期性同步工具CyclicBarrier 38 12)异步计算的结果Future 40 13)安排线程池ScheduledExecutorService 40 五多线程面试题 41 六其他主题 41 1)...
同时,`Future`和`Callable`接口也可以与Lambda表达式结合,用于处理有返回结果的任务。通过这种方式,我们不仅可以灵活控制线程的并发执行,还可以高效地管理任务的生命周期和结果。 总结来说,Java线程池通过复用...
6.3.2 携带结果的任务Callable与Future 6.3.3 示例:使用Future实现页面渲染器 6.3.4 在异构任务并行化中存在的局限 6.3.5 CompletionService:Executor与BlockingQueue 6.3.6 示例:使用CompletionService实现...
6.3.2 携带结果的任务Callable与Future 6.3.3 示例:使用Future实现页面渲染器 6.3.4 在异构任务并行化中存在的局限 6.3.5 CompletionService:Executor与BlockingQueue 6.3.6 示例:使用CompletionService实现...