countdownlatch是通過計數(shù)器實現(xiàn)的,初始化時定義count數(shù)琅坡,每一個線程執(zhí)行完將count數(shù)-1.當count=0時表示所以線程執(zhí)行完畢赠堵,可以進入接下來的邏輯。
countdownlatch的await()方法是等待count=0量蕊,執(zhí)行此方法時,執(zhí)行完的線程會進入阻塞艇挨,并等待其他線程完成残炮,當所有線程完成時,await會喚醒阻塞隊列并釋放所有線程資源缩滨。
當高并發(fā)請求時势就,countdownlatch的await方法有可能會引起死鎖。如果使用的線程池數(shù)量較少脉漏,在高并發(fā)時會出現(xiàn)多個請求占用了全部的線程資源苞冯,但是每個請求又需要await其他線程,其他線程在等待線程池資源鸠删,導致多個請求同時進入線程阻塞抱完,最后形成死鎖。
解決方法刃泡,使用自定義線程池巧娱,擴大線程數(shù)量,并且建立線程池拒絕機制烘贴。