馬老師Kubernetes原生配置管理 Kustomize
final V putVal(K key, V value, boolean onlyIfAbsent) {
? ?// key 和 value 不能為空
? ?if (key == null || value == null) throw new NullPointerException();
? ?int hash = spread(key.hashCode());
? ?int binCount = 0;
? ?for (Node<K,V>[] tab = table;;) {
? ? ? ?// f = 目標(biāo)位置元素
? ? ? ?Node<K,V> f; int n, i, fh;// fh 后面存放目標(biāo)位置的元素 hash 值
? ? ? ?if (tab == null || (n = tab.length) == 0)
? ? ? ? ? ?// 數(shù)組桶為空,初始化數(shù)組桶(自旋+CAS)
? ? ? ? ? ?tab = initTable();
? ? ? ?else if ((f = tabAt(tab, i = (n - 1) & hash)) == null) {
? ? ? ? ? ?// 桶內(nèi)為空,CAS 放入,不加鎖,成功了就直接 break 跳出
? ? ? ? ? ?if (casTabAt(tab, i, null,new Node<K,V>(hash, key, value, null)))
? ? ? ? ? ? ? ?break; ?// no lock when adding to empty bin
? ? ? ?}

標(biāo)簽: