JDK併發包下主要新增了兩個內容,一個是關於線程和鎖的同步控制工具,一個是併發容器。
面試時問的比較多的是信號量、倒數計數器、ConcurrentHashMap。
(1)信號量(Semaphore)
信號量可以用來限流。Semaphore內部維護了一個計數器,在多線程訪問的情況下,可以限制應用程序每次處理的請求數量。
(2)倒數計數器(CountDownLatch)
倒數計數器可以用來控制主線程的觸發條件。一種應用場景是,多個子線程完成了資源的準備工作後,主線程纔開始啓動,類似於火箭發射;另一種應用場景是,主線程進入休眠等待子線程完成各自的任務,類似於超市所有人員都離開後才能關門。兩種場景看起來很像,但是側重點不同。
(3)ConcurrentHashMap
ConcurrentHashMap是併發場景下的HashMap的最好替代品,對數據進行了分片加鎖處理,類似於分段維修馬路,每個線程每次只會訪問到其中的一段,所以並不會鎖住全部數據。