Java - 多線程Callable、Executors、Future

來源:互聯網
上載者:User

標籤: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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.