亲宝软件园·资讯

展开

Java CAS操作与Unsafe类 Java CAS操作与Unsafe类详解

心悦君兮君不知-睿 人气:0
想了解Java CAS操作与Unsafe类详解的相关内容吗,心悦君兮君不知-睿在本文为您仔细讲解Java CAS操作与Unsafe类的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:Java,CAS操作,Java,Unsafe类,下面大家一起来学习吧。

一、复习

计算机内存模型,synchronized和volatile关键字简介

二、两者对比

sychronized和volatile都解决了内存可见性问题
不同点:
(1)前者是独占锁,并且存在者上下文切换的开销以及线程重新调度的开销;后者是非阻塞算法,不会造成上下文切换的开销。
(2)前者可以保证操作的原子性,但是后者不能保证操作的原子性。

三、在什么情况下才会使用volatile

四、Java中的原子性操作

五、Java中的CAS操作

六、ABA问题

七、Unsafe类

在JDK中的rt.jar包中有许多方法都是native的,这是一种硬件级别的操作,使用JNI来调用C++底层函数来操作。

1.long objectFieldOffset(Field field)

释义:获取某个对象的中的某个域值所在对象的中的内存偏移量

try{
 long value = Unsafe.objectFieldOffset(AutomicLong.class.getDeclaredField("value"));
}catch(Exception e){
 e.printStackTrace();
}

2.int arrayBaseOffset(Class arrayClass)

释义:获取数组中的第一个元素地址

3.int arrayIndexOffset(Class arrayClass)

释义:获取数组中第一个元素的字节大小

4.boolean compareAndSwapLong(Object obj,long offset,long expect,long update)

可以见上文

八、源码:

所在包:com.ruigege.OtherFoundationOfConcurrent2

https://github.com/ruigege66/ConcurrentJava

加载全部内容

相关教程
猜你喜欢
用户评论