標籤:result cms 成功 exception 任務 ima icm rac 存在
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介面的原始碼:
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:http://blog.csdn.net/pipisorry/article/details/44341579
ref:http://blog.csdn.net/mazhimazh/article/details/19291965
[怎樣管理Java線程池及搭建分布式Hadoop調度架構]
Java - 多線程Callable、Executors、Future