AtomicIntegerArray源碼分析與感悟

AtomicIntegerArray,提供了一個原子訪問數(shù)據(jù)中元素方法的一種途徑

對于這類原子操作,在理解上應該沒什么問題,通過AtomitoIntegerArray,我學到如下幾個關鍵點:

?1)int sacle = unsafe.arrayIndexScale(int[].class)與 int base = unsafe.arrayBaseOffset(Int[].class); 其中 unsafe.arrayBaseOffset 獲取該類型的數(shù)組,在對象存儲時,存放第一個元素的內存地址,相對于數(shù)組對象起始地址的內存偏移量。 unsafe.arrayIndexSacle(int[].class) 獲取該類型的數(shù)組中元素的大小,占用多少個字節(jié)。

?2) 根據(jù)scale ,base 如何準備定位到任意一個下標的地址呢?請查看如下關鍵代碼塊

用于定位元素偏移量的控制值 舉例說明,int scale = 4;1個int類型,在java中占用4個字節(jié)。 Integer.numberOfLeadingZeros(scale); 返回 scale 高位連續(xù)0的個數(shù),得出shift = 2, 而shift在如下方法使用 得出結論了吧,shift就是 用來定位數(shù)組中的內存位置,用來移位用的,每向左移動移位,在不越界的情況下,想當于乘以2。也就是int類型的長度為4,也就是第0個位置是0,第1(i)個位置是4,,第二個(i)位置是8,也就是偏移位置等于 i * 4,也就是 i << 2;總結出一個乘法轉換成移位操作的案例: a * (一個2的冪(n)的數(shù)) = a << n; 給出一個指定2的冪的數(shù),怎么算成n,,參照shift的計算方法。

原文:http://blog.csdn.net/prestigeding/article/details/52980801

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 一、基本數(shù)據(jù)類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數(shù)值 對于byte類型而言...
    龍貓小爺閱讀 4,436評論 0 16
  • 轉至元數(shù)據(jù)結尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,032評論 0 9
  • 宸炫閱讀 156評論 0 0
  • 清晨的車站是人們開始忙碌的起點,108路依舊人煙稀疏,熙熙攘攘的人群里仿佛看到了彼此的影子。同一個城市不...
    公子_瑾瑜閱讀 218評論 0 1
  • 3月底來武漢 正值武大櫻花盛開時 風起時 花瓣三三兩兩 瀟瀟灑灑飄落地 美極了
    xxxinephele閱讀 303評論 0 0

友情鏈接更多精彩內容