18-Executor框架詳解2

CompletionService接口

CompletionService相當於一個執行任務的服務,通過submit丟任務給這個服務,服務內部去執行任務,可以通過服務提供的一些方法獲取服務中已經完成的任務.

  • Future submit(Callable task);
  • Future submit(Runnable task, V result);
  • Future take() throws InterruptedException;
    從服務中返回並移除一個已經完成的任務,如果獲取不到,會一致阻塞到有返回值爲止。此方法會響應線程中斷。
  • Future poll();
    從服務中返回並移除一個已經完成的任務,如果內部沒有已經完成的任務,則返回空,此方法會立即響應。
  • Future poll(long timeout, TimeUnit unit) throws InterruptedException;

ExecutorCompletionService類

ExecutorCompletionService類是CompletionService接口的具體實現

說一下其內部原理,ExecutorCompletionService創建的時候會傳入一個線程池,調用submit方法傳入需要執行的任務,任務由內部的線程池來處理;ExecutorCompletionService內部有個阻塞隊列,任意一個任務完成之後,會將任務的執行結果(Future類型)放入阻塞隊列中,然後其他線程可以調用它take、poll方法從這個阻塞隊列中獲取一個已經完成的任務,獲取任務返回結果的順序和任務執行完成的先後順序一致,所以最先完成的任務會先返回。

第20天:JUC中的Executor框架詳解2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章