1. hashentry類
static
final
class hashentry
}
2. segment類static
final class segmentextends reentrantlock implements serializable
/**
* 設定 table 引用到這個新生成的 hashentry 陣列
* 只能在持有鎖或建構函式中呼叫本方法
*/void settable(hashentry newtable)
/**
* 根據 key 的雜湊值,找到 table 中對應的那個桶(table 陣列的某個陣列成員)
*/ hashentrygetfirst(int hash)
}
concurrenthashmap 的高併發性主要來自於三個方面:
用分離鎖實現多個執行緒間的更深層次的共享訪問。
用 hashentery 物件的不變性來降低執行讀操作的執行緒在遍歷鍊錶期間對加鎖的需求。
通過對同乙個 volatile 變數的寫 / 讀訪問,協調不同執行緒間讀 / 寫操作的記憶體可見性。
接下來詳細介紹這三種機制:
v put(k key, int hash, v value, boolean onlyifabsent)
else
return oldvalue;
} finally
}
v get(object key, int hash)
e = e.next;
} }
return
null;
}
Java並發包分析 BlockingQueue
arrayblockingqueue顧名思義是一種陣列形式的阻塞佇列,其自然就有陣列的特點,即佇列的長度不可改變,只有初始化的時候指定。下面,我們看一下例子。public class arrayblock public blockingqueuegetblockingqueue 建立乙個大小為3的a...
Java並發包分析 BlockingQueue
arrayblockingqueue顧名思義是一種陣列形式的阻塞佇列,其自然就有陣列的特點,即佇列的長度不可改變,只有初始化的時候指定。下面,我們看一下例子。public class arrayblock public blockingqueuegetblockingqueue 建立乙個大小為3的a...
JDK並發包之CyclicBarrier
cyclicbarrier也是一種計數器,其實可以反覆使用的,比如說,將計數器設定為10,那麼湊齊第一批10個執行緒後,計數器就會清零,然後可以接著湊齊下一批10個執行緒。cyclicbarrier是比countdownlatch更加強大的,cyclicbarrier可以接收乙個引數作為barrie...