|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.util.concurrent.ExecutorCompletionService<V>
public class ExecutorCompletionService<V>
使用提供的 Executor
來執行任務的 CompletionService
。此類別將安排那些完成時提交的任務,把它們放置在可使用 take 存取的佇列上。該類別非常輕便,適合於在執行幾組任務時臨時使用。
用法範例。 假定您有針對某個問題的一組求解程序,每個求解程序都能返回某種型別的 Result 值,並且您想同時運行它們,使用方法 use(Result r) 處理返回非 null 值的每個求解程序的返回結果。可以這樣編寫程序:
void solve(Executor e, Collection<Callable<Result>> solvers) throws InterruptedException, ExecutionException { CompletionService<Result> ecs = new ExecutorCompletionService<Result>(e); for (Callable<Result> s : solvers) ecs.submit(s); int n = solvers.size(); for (int i = 0; i < n; ++i) { Result r = ecs.take().get(); if (r != null) use(r); } }假定您想使用任務集中的第一個非 null 結果,而忽略任何遇到異常的任務,並且在第一個任務就緒時取消其他所有任務:
void solve(Executor e, Collection<Callable<Result>> solvers) throws InterruptedException { CompletionService<Result> ecs = new ExecutorCompletionService<Result>(e); int n = solvers.size(); List<Future<Result>> futures = new ArrayList<Future<Result>>(n); Result result = null; try { for (Callable<Result> s : solvers) futures.add(ecs.submit(s)); for (int i = 0; i < n; ++i) { try { Result r = ecs.take().get(); if (r != null) { result = r; break; } } catch(ExecutionException ignore) {} } } finally { for (Future<Result> f : futures) f.cancel(true); } if (result != null) use(result); }
建構子摘要 | |
---|---|
ExecutorCompletionService(Executor executor)
使用為執行基本任務而提供的執行程序創建一個 ExecutorCompletionService,並將 LinkedBlockingQueue 作為完成佇列。 |
|
ExecutorCompletionService(Executor executor,
BlockingQueue<Future<V>> completionQueue)
使用為執行基本任務而提供的執行程序創建一個 ExecutorCompletionService,並將所提供的佇列作為其完成佇列。 |
方法摘要 | |
---|---|
Future<V> |
poll()
獲取並移除表示下一個已完成任務的 Future,如果不存在這樣的任務,則返回 null。 |
Future<V> |
poll(long timeout,
TimeUnit unit)
獲取並移除表示下一個已完成任務的 Future,如果目前不存在這樣的任務,則將等待指定的時間(如果有必要)。 |
Future<V> |
submit(Callable<V> task)
提交要執行的值返回任務,並返回表示掛起的任務結果的 Future。 |
Future<V> |
submit(Runnable task,
V result)
提交要執行的 Runnable 任務,並返回一個表示任務完成的 Future,可以提取或輪詢此任務。 |
Future<V> |
take()
獲取並移除表示下一個已完成任務的 Future,如果目前不存在這樣的任務,則等待。 |
從類別 java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
建構子詳細資訊 |
---|
public ExecutorCompletionService(Executor executor)
LinkedBlockingQueue
作為完成佇列。
executor
- 要使用的執行程序
NullPointerException
- 如果執行程序為 nullpublic ExecutorCompletionService(Executor executor, BlockingQueue<Future<V>> completionQueue)
executor
- 要使用的執行程序completionQueue
- 用作完成佇列的佇列,通常是專供此服務使用的佇列
NullPointerException
- 如果執行程序或 completionQueue 為 null方法詳細資訊 |
---|
public Future<V> submit(Callable<V> task)
CompletionService
複製的描述
CompletionService<V>
中的 submit
task
- 要提交的任務
public Future<V> submit(Runnable task, V result)
CompletionService
複製的描述
CompletionService<V>
中的 submit
task
- 要提交的任務result
- 要返回的已成功完成任務的結果
public Future<V> take() throws InterruptedException
CompletionService
複製的描述
CompletionService<V>
中的 take
InterruptedException
- 如果在等待時被中斷public Future<V> poll()
CompletionService
複製的描述
CompletionService<V>
中的 poll
public Future<V> poll(long timeout, TimeUnit unit) throws InterruptedException
CompletionService
複製的描述
CompletionService<V>
中的 poll
timeout
- 放棄之前需要等待的時間長度,以 unit 為時間單位unit
- 確定如何解釋 timeout 參數的 TimeUnit
InterruptedException
- 如果在等待時被中斷
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。