Java - 多线程Callable、Executors、Future
2015-03-17 14:55
351 查看
http://blog.csdn.net/pipisorry/article/details/44341579
Introduction
Callable接口代表一段可以调用并返回结果的代码;
Future接口表示异步任务,是还没有完成的任务给出的未来结果。
所以Callable用于产生结果,Future用于获取结果。
Callable接口:Java 5在concurrency包中引入了java.util.concurrent.Callable 接口,它和Runnable接口很相似,但它可以返回一个对象或者抛出一个异常。Callable接口使用泛型去定义它的返回类型。
Executors类:提供了一些有用的方法在线程池中执行Callable内的任务。由于Callable任务是并行的,我们必须等待它返回的结果。
Future对象:java.util.concurrent.Future对象为我们解决了这个问题。在线程池提交Callable任务后返回了一个Future对象,使用它可以知道Callable任务的状态和得到Callable返回的执行结果。Future提供了get()方法让我们可以等待Callable结束并获取它的执行结果。
Callable接口的源码:
Future接口的源码:
一个例子
1. 用语料和对应参数创建可调用对象callable, 提交给executor并行执行, 结果保存在future对象中,最后可以用future对象的get()方法提取执行结果
2. ExcutorService接口
ExecutorService提供了管理终止的方法,以及可为跟踪一个或多个异步任务执行状况而生成 Future 的方法。
主要函数:
[java中Executor、ExecutorService、ThreadPoolExecutor介绍
]
from:/article/1480577.html
ref:http://blog.csdn.net/mazhimazh/article/details/19291965
Introduction
Callable接口代表一段可以调用并返回结果的代码;
Future接口表示异步任务,是还没有完成的任务给出的未来结果。
所以Callable用于产生结果,Future用于获取结果。
Callable接口:Java 5在concurrency包中引入了java.util.concurrent.Callable 接口,它和Runnable接口很相似,但它可以返回一个对象或者抛出一个异常。Callable接口使用泛型去定义它的返回类型。
Executors类:提供了一些有用的方法在线程池中执行Callable内的任务。由于Callable任务是并行的,我们必须等待它返回的结果。
Future对象:java.util.concurrent.Future对象为我们解决了这个问题。在线程池提交Callable任务后返回了一个Future对象,使用它可以知道Callable任务的状态和得到Callable返回的执行结果。Future提供了get()方法让我们可以等待Callable结束并获取它的执行结果。
Callable接口的源码:
public interface Callable<V> { V call() throws Exception; // 计算结果 }
Future接口的源码:
public interface Future<V> { boolean cancel(boolean mayInterruptIfRunning);// 试图取消对此任务的执行 boolean isCancelled(); // 如果在任务正常完成前将其取消,则返回 true boolean isDone(); // 如果任务已完成,则返回 true V get() throws InterruptedException, ExecutionException; // 如有必要,等待计算完成,然后获取其结果 // 如有必要,最多等待为使计算完成所给定的时间之后,获取其结果(如果结果可用)。 V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException; }
一个例子
private ExecutorService executor = Executors.newFixedThreadPool(numberOfThreads);
try { Callable<TopicModel> callable = new TopicModelCallable(corpus, param); Future<TopicModel> future = executor.submit(callable); futureList.add(future); } catch (Exception ex) { ex.printStackTrace(); }
for (Future<TopicModel> future : futureList) { TopicModel topicModel = future.get(); topicModelList.add(topicModel); }Note:
1. 用语料和对应参数创建可调用对象callable, 提交给executor并行执行, 结果保存在future对象中,最后可以用future对象的get()方法提取执行结果
2. ExcutorService接口
ExecutorService提供了管理终止的方法,以及可为跟踪一个或多个异步任务执行状况而生成 Future 的方法。
主要函数:
<T> Future<T> submit(Callable<T> task) 提交一个返回值的任务用于执行,返回一个表示任务的未决结果的 Future。该 Future 的 get 方法在成功完成时将会返回该任务的结果。 如果想立即阻塞任务的等待,则可以使用 result = exec.submit(aCallable).get(); 形式的构造。 注:Executors 类包括了一组方法,可以转换某些其他常见的类似于闭包的对象, 例如,将 PrivilegedAction 转换为 Callable 形式,这样就可以提交它们了。 参数: task - 要提交的任务 返回: 表示任务等待完成的 Future 抛出: RejectedExecutionException - 如果任务无法安排执行 NullPointerException - 如果该任务为 null 注意:关于submit的使用和Callable可以参阅《使用Callable返回结果》
[java中Executor、ExecutorService、ThreadPoolExecutor介绍
]
from:/article/1480577.html
ref:http://blog.csdn.net/mazhimazh/article/details/19291965
相关文章推荐
- Java多线程之Executor、ExecutorService、Executors、Callable、Future与FutureTask
- Java - 多线程Callable、Executors、Future
- Java - 多线程Callable、Executors、Future
- Java多线程 callable和future
- java多线程总结笔记3——Callable和Future
- JAVA多线程实现的三种方式(继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程)
- 多线程并发库高级应用 之 java5中的线程并发库--线程池、Callable&Future
- JAVA---多线程之Callable与Future,FutureTask,及其简单应用
- Java多线程与并发库高级应用之Callable和Future
- java多线程开发,Executors、FutureTask、Callable
- Java多线程编程--(8)学习Java5.0 并发编程包--线程池、Callable & Future 简介
- 多线程并发库高级应用 之 java5中的线程并发库--线程池、Callable&Future
- 黑马程序员——Java多线程—Callable、Future
- Java多线程:Callable、ExecutorService、CountDownLatch、Future和FutureTask
- Java:多线程,线程池,使用CompletionService通过Future来处理Callable的返回结果
- java多线程Future和Callable用法
- Java多线程 - Callable和Future
- JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没
- Java多线程3-线程池、Callable和Future
- Java多线程21:多线程下的其他组件之CyclicBarrier、Callable、Future和FutureTask