AtomicIntegerArray源码分析与感悟

AtomicIntegerArray,提供了一个原子访问数据中元素方法的一种途径

对于这类原子操作,在理解上应该没什么问题,通过AtomitoIntegerArray,我学到如下几个关键点:

 1)int sacle = unsafe.arrayIndexScale(int[].class)与 int base = unsafe.arrayBaseOffset(Int[].class); 其中 unsafe.arrayBaseOffset 获取该类型的数组,在对象存储时,存放第一个元素的内存地址,相对于数组对象起始地址的内存偏移量。 unsafe.arrayIndexSacle(int[].class) 获取该类型的数组中元素的大小,占用多少个字节。

 2) 根据scale ,base 如何准备定位到任意一个下标的地址呢?请查看如下关键代码块

用于定位元素偏移量的控制值 举例说明,int scale = 4;1个int类型,在java中占用4个字节。 Integer.numberOfLeadingZeros(scale); 返回 scale 高位连续0的个数,得出shift = 2, 而shift在如下方法使用 得出结论了吧,shift就是 用来定位数组中的内存位置,用来移位用的,每向左移动移位,在不越界的情况下,想当于乘以2。也就是int类型的长度为4,也就是第0个位置是0,第1(i)个位置是4,,第二个(i)位置是8,也就是偏移位置等于 i * 4,也就是 i << 2;总结出一个乘法转换成移位操作的案例: a * (一个2的幂(n)的数) = a << n; 给出一个指定2的幂的数,怎么算成n,,参照shift的计算方法。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 9,789评论 0 16
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,894评论 0 9
  • 宸炫阅读 1,225评论 0 0
  • 清晨的车站是人们开始忙碌的起点,108路依旧人烟稀疏,熙熙攘攘的人群里仿佛看到了彼此的影子。同一个城市不...
    公子_瑾瑜阅读 1,499评论 0 1
  • 3月底来武汉 正值武大樱花盛开时 风起时 花瓣三三两两 潇潇洒洒飘落地 美极了
    xxxinephele阅读 1,891评论 0 0

友情链接更多精彩内容