1. 程式人生 > >java.util.concurrent.CompletionService 介面 原始碼

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>

所有已知實現類:

    ExecutorCompletionService

    將生產新的非同步任務與使用已完成任務的結果分離開來的服務。

  • 生產者 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 - 如果在等待時被中斷