java.util.concurrent.CompletionService 介面 原始碼
執行緒池相關
原始碼:
package java.util.concurrent; public interface CompletionService<V> { Future<V> submit(Callable<V> task); Future<V> submit(Runnable task, V result); Future<V> take() throws InterruptedException; Future<V> poll(); Future<V> poll(long timeout, TimeUnit unit) throws InterruptedException; }
介面 CompletionService<V>
所有已知實現類:
將生產新的非同步任務與使用已完成任務的結果分離開來的服務。
- 生產者 submit 執行的任務。
- 使用者 take 已完成的任務,並按照完成這些任務的順序處理它們的結果。
例如,CompletionService 可以用來管理非同步 IO ,執行讀操作的任務作為程式或系統的一部分提交,然後,當完成讀操作時,會在程式的不同部分執行其他操作,執行操作的順序可能與所請求的順序不同。
通常,CompletionService 依賴於一個單獨的 Executor
來實際執行任務,在這種情況下,CompletionService 只管理一個內部完成佇列。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,如果目前不存在這樣的任務,則等待。 |
submit
Future<V> submit(Callable<V> task)
提交要執行的值返回任務,並返回表示掛起的任務結果的 Future。在完成時,可能會提取或輪詢此任務。
引數:
task
- 要提交的任務
返回:
一個表示掛起的任務完成的 Future
丟擲:
RejectedExecutionException
- 如果不能安排要執行的任務
NullPointerException
- 如果該任務為 null
submit
Future<V> submit(Runnable task, V result)
提交要執行的 Runnable 任務,並返回一個表示任務完成的 Future,可以提取或輪詢此任務。
引數:
task
- 要提交的任務
result
- 要返回的已成功完成任務的結果
返回:
一個表示掛起的任務完成的 Future,其 get() 方法將返回完成時給出的結果值
丟擲:
RejectedExecutionException
- 如果不能安排要執行的任務
NullPointerException
- 如果該任務為 null
take
Future<V> take() throws InterruptedException
獲取並移除表示下一個已完成任務的 Future,如果目前不存在這樣的任務,則等待。
返回:
表示下一個已完成任務的 Future
丟擲:
InterruptedException
- 如果在等待時被中斷
poll
Future<V> poll()
獲取並移除表示下一個已完成任務的 Future,如果不存在這樣的任務,則返回 null。
返回:
表示下一個已完成任務的 Future;如果不存在這樣的任務,則返回 null
poll
Future<V> poll(long timeout, TimeUnit unit) throws InterruptedException
獲取並移除表示下一個已完成任務的 Future,如果目前不存在這樣的任務,則將等待指定的時間(如果有必要)。
引數:
timeout
- 放棄之前需要等待的時間長度,以 unit 為時間單位
unit
- 確定如何解釋 timeout 引數的 TimeUnit
返回:
表示下一個已完成任務的 Future;如果等待了指定時間仍然不存在這樣的任務,則返回 null
丟擲:
InterruptedException
- 如果在等待時被中斷