设为首页 加入收藏

TOP

JDK AtomicInteger 源码分析
2017-06-26 10:23:03 】 浏览:6579
Tags:JDK AtomicInteger 源码 分析

@(JDK)[AtomicInteger]


Unsafe在创建实例的时候,不能仅仅通过new Unsafe()或者Unsafe.getUnsafe()来获取,因为Java会进行安全校验,只有信任的代码,才能够获取实例。


要达到上述对应的ClassLoader为空,只有通过BootStrapLoader来加载才可以。(可以通过bootclasspath实现)
java -Xbootclasspath:/usr/jdk1.7.0/jre/lib/rt.jar:. com.mishadoff.magic.UnsafeClient


  Unsafe里面有一个静态变量,theUnsafe,另一种方式就是通过反射来获取该实例。
private static final Unsafe theUnsafe;


可以使用allocateInstance方法来绕过构造方法的调用。


  可以通过Unsafe. compareAndSwap方法来实现Lock-free数据结构。使用的时候一般都会采用while循环在等待(Spin Lock),以及volatile来对内存数据变更能及时反应出来,在JDK里面AtomicInteger等应用到了。


可以通过unsafe.objectFieldOffset来获取类的字段偏移,一般可以和Unsafe. compareAndSwap结合来使用。
如:


在AtomicInteger里面,主要通过使用CAS和volatile来实现。


这两个方法,和上面的区别在于只会调用一次,那么就需要开发者考虑失败的情况。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java 包装类笔记 下一篇Struts2 拦截器配置以及实现

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目