「每天一道面試題」CountDownLatch實現原理及適用場景?

「每天一道面試題」CountDownLatch實現原理及適用場景?

實現原理

使用CountDownLatch(int count)構建CountDownLatch實例,將count參數賦值給內部計數器state,調用await()方法阻塞當前線程,並將當前線程封裝加入到等待隊列中,直到state等於零或當前線程被中斷;調用countDown()方法使state值減一,如果state等於零則喚醒等待隊列中的線程。

適應場景

實際工作中,CountDownLatch適用於如下使用場景:客戶端的一個同步請求查詢用戶的風險等級,服務端收到請求後會請求多個子系統獲取數據,然後使用風險評估規則模型進行風險評估。如果使用單線程去完成這些操作,這個同步請求超時的可能性會很大,因為服務端請求多個子系統是依次排隊的,請求子系統獲取數據的時間是線性累加的。此時可以使用CountDownLatch,讓多個線程併發請求多個子系統,當獲取到多個子系統數據之後,再進行風險評估,這樣請求子系統獲取數據的時間就等於最耗時的那個請求的時間,可以大大減少處理時間。


分享到:


相關文章: