1. 程式人生 > >學了Java併發程式設計藝術及多執行緒核心程式設計技術,以及最開始學的程式設計思想那本書,今天做些總結

學了Java併發程式設計藝術及多執行緒核心程式設計技術,以及最開始學的程式設計思想那本書,今天做些總結

併發Map分析

位碼shift預設值是28,對hash值右移28位,取高四位,獲得segments位置,掩碼mask預設值16-1,作一個與值,不知道有何用處,兩個都是不可修改,初始值和併發度有關,一旦確立下來決定了segments陣列大小,包括segments陣列物件不可修改,

Size 大小計算,先計算modCount所有和,然後再計算一遍,判斷是否發生改變, 另一種方式獲取每個size時進行鎖

重hash時只拓展當前自身的segment陣列hashEntry

Volatile不具備原子性,如x++,它包含了讀取,修改,寫入的過程,若兩個過程同時進行了修改,然後其中一個執行緒再寫入,

CountDownLatch的用法

CountDownLatch典型用法1:某一執行緒在開始執行前等待n個執行緒執行完畢。將CountDownLatch的計數器初始化為n new CountDownLatch(n) ,每當一個任務執行緒執行完畢,就將計數器減1 countdownlatch.countDown(),當計數器的值變為0時,在CountDownLatch上 await() 的執行緒就會被喚醒。一個典型應用場景就是啟動一個服務時,主執行緒需要等待多個元件載入完畢,之後再繼續執行。

CountDownLatch典型用法2:實現多個執行緒開始執行任務的最大並行性。注意是並行性,不是併發,強調的是多個執行緒在某一時刻同時開始執行。類似於賽跑,將多個執行緒放到起點,等待發令槍響,然後同時開跑。做法是初始化一個共享的CountDownLatch(1),將其計數器初始化為1,多個執行緒在開始執行任務前首先 coundownlatch.await()

,當主執行緒呼叫 countDown() 時,計數器變為0,多個執行緒同時被喚醒。

CountDownLatch的不足

CountDownLatch是一次性的,計數器的值只能在構造方法中初始化一次,之後沒有任何機制再次對其設定值,當CountDownLatch使用完畢後,它不能再次被使用。


參考文章:

https://www.cnblogs.com/uodut/p/6830939.html

比較雜