Java CompletionService 的作用與場景解析
問:簡單說說 CompletionService 的作用和使用場景及原理?
答:CompletionService 是一個泛型介面,其實現類是 ExecutorCompletionService,其主要解決的場景是:主執行緒提交多個任務然後希望有任務完成就處理結果,並且按照任務完成順序逐個處理(譬如併發請求返回重新整理 UI 的操作,就可以誰請求成功就開始刷而不用等待所有 OK 才重新整理)。CompletionService 介面如下:
public interface CompletionService<V> {
//同執行緒池介面方法含義
Future<V> submit(Callable<V> task);
Future<V> submit(Runnable task, V result);
// 阻塞等待獲取下一個完成任務的結果
Future<V> take() throws InterruptedException;
// 直接獲取下一個完成任務的結果,如果沒有已經完成的任務則返回null
Future<V> poll();
// 最多等待timeout後返回,如果沒有已經完成的任務則返回null
Future<V> poll(long timeout, TimeUnit unit) throws InterruptedException;
}
ExecutorCompletionService 實現類依賴於 Executor 完成實際的任務提交執行,自己主要負責結果的排隊處理,AbstractExecutorService 的 invokAny 實現就依賴此類,ExecutorCompletionService 內部有一個額外的佇列,每個提交給 Executor 的任務都是通過繼承 FutureTask 封裝過的,FutureTask 在任務結束後會回撥 done 方法,所以 ExecutorCompletionService 就在繼承 FutureTask 封裝重寫的 done 方法中,將當前 FutureTask 加入額外佇列,然後我們通過其 take 或者 poll 方法獲取的實質就是從這個額外佇列中取資料。
相關文章
- CRM管理系統的應用場景——四大作用解析
- @Transactional詳解(作用、失效場景與解決方法)
- Java程式中的代理作用和應用場景及實現Java
- Java併發之CompletionService詳解Java
- 單幅RGB影像整體三維場景解析與重建
- iOS runtime執行時的作用和應用場景iOS
- call apply bind的作用及區別? 應用場景?APP
- 美顏sdk在影片場景有哪些作用?
- 全雙工與半雙工技術解析及其應用場景
- 區塊鏈應用場景解析區塊鏈
- Java異常處理場景中不同位置的返回值詳細解析Java
- mysql與redis的區別與使用場景MySqlRedis
- 引數繫結在PHP程式碼測試中的重要作用與應用場景PHP
- BFC的概念與應用場景
- java中ThreadLocal的應用場景分析Javathread
- Java 讀寫鎖 ReadWriteLock 原理與應用場景詳解Java
- 《重學Java高併發》Sempahore的使用場景與常見誤區Java
- 小程式的小元件技術能力和場景解析元件
- 【java】CountDownLatch運用場景(1)JavaCountDownLatch
- CompletionService和CompletableFuture
- Java中的引用型別和使用場景Java型別
- iOS中Block的用法,示例,應用場景,與底層原理解析(這可能是最詳細的Block解析)iOSBloC
- 深度學習:智慧對話機器人適用場景與技術解析深度學習機器人
- 點陣圖與ERP場景
- Redis - 介紹與使用場景Redis
- 分散式資料庫的需求與場景分散式資料庫
- [譯] Java 資料流的不同應用場景Java
- 乾貨 | 移動安全管理多場景全解析
- 鴻蒙Next密碼自動填充服務:功能與應用場景全解析鴻蒙密碼
- 雲原生事件驅動引擎(RocketMQ-EventBridge)應用場景與技術解析事件MQ
- 數字對映:數字孿生技術的應用場景及作用
- Redis叢集案例與場景分析Redis
- Unity C# 打包AssetBundle與場景UnityC#
- Maya模型製作與場景建模模型
- Java 自定義註解及使用場景Java
- 全連線層的作用解析
- 【譯】Object與Map的異同及使用場景Object
- 美團多場景建模的探索與實踐