由於在做接口的性能優化,最近也在學習併發編程的這塊知識,剛好將理論應用於實戰中。對瞭解到的東西不僅加深了印象,而且能夠用起來,才達到了學習的目的。
(1)當我們使用線程池進行併發編程時,後續操作需要依賴於並行線程執行的結果時,這時就可以考慮使用java併發包裏的countDownLatch和cyclicBarrier來實現線程等待。
-
countDownLatch實現線程等待,它的計數器不可重複利用,每個線程執行完則退出線程,等待其他線程執行完;
-
cyclicBarrier實現線程同步,即每個線程執行完不會立即退出,會一直等待最後一個線程執行完,所有線程才一起退出。它的計數器當減到0時會自動重置到設置時的初始值,也就是可循環利用,並且也支持回調函數。在批量處理一些數據的場景下,cyclicBarrier可大大派上用場。
(2)功能強大的異步編程接口completeFuture
-
支持線程之間的串行,比如:thenApply 、thenAccept;
-
支持線下之間的並行,比如:thenApplyAsync、thenAcceptAsync;
-
支持線程之間的聚合,比如:thenCombine,簡而言之就是後續線程依賴之前線程的結果時可以考慮使用這類接口;