苏州java培训班|什么是Unsafe与CAS

苏州java培训班|什么是UnsafeCAS

苏州java培训班|什么是Unsafe与CAS_第1张图片

Unsafe

简单讲一下这个类。Java无法直接访问底层操作系统,而是通过本地(native)方法来访问。不过尽管如此,JVM还是开了一个后门,JDK中有一个类Unsafe,它提供了硬件级别的原子操作。

这个类尽管里面的方法都是public的,但是并没有办法使用它们,JDK API文档也没有提供任何关于这个类的方法的解释。总而言之,对于Unsafe类的使用都是受限制的,只有授信的代码才能获得该类的实例,当然JDK库里面的类是可以随意使用的。

从第一行的描述可以了解到Unsafe提供了硬件级别的操作,比如说获取某个属性在内存中的位置,比如说修改对象的字段值,即使它是私有的。不过Java本身就是为了屏蔽底层的差异,对于一般的开发而言也很少会有这样的需求。

CAS

CAS,Compare and Swap即比较并交换,设计并发算法时常用到的一种技术,java.util.concurrent包全完建立在CAS之上,没有CAS也就没有此包,可见CAS的重要性。

当前的处理器基本都支持CAS,只不过不同的厂家的实现不一样罢了。CAS有三个操作数:内存值V、旧的预期值A、要修改的值B,当且仅当预期值A和内存值V相同时,将内存值修改为B并返回true,否则什么都不做并返回false。

CAS的缺点

CAS看起来很美,但这种操作显然无法涵盖并发下的所有场景,并且CAS从语义上来说也不是完美的,存在这样一个逻辑漏洞:如果一个变量V初次读取的时候是A值,并且在准备赋值的时候检查到它仍然是A值,那我们就能说明它的值没有被其他线程修改过了吗?如果在这段期间它的值曾经被改成了B,然后又改回A,那CAS操作就会误认为它从来没有被修改过。这个漏洞称为CAS操作的"ABA"问题。java.util.concurrent包为了解决这个问题,提供了一个带有标记的原子引用类"AtomicStampedReference",它可以通过控制变量值的版本来保证CAS的正确性。不过目前来说这个类比较"鸡肋",大部分情况下ABA问题并不会影响程序并发的正确性,如果需要解决ABA问题,使用传统的互斥同步可能回避原子类更加高效。

学IT,来上元教育,上元教育欢迎您的咨询。

上课内容:

1、深度理解Java面向对象、分布式、健壮性、可移植性、多线程等特点;

深入学习Oracle、MySQL数据库,运用JDBC完成项目中Dao层CRUD实现;

Html5、CSS3前端技术结合jQuery脚本和bootstrap框架制作精美官网页面;

Struts2、Spring、Hibernate框架整合,Maven分模块构建,完成电商平台项目;

SpringMVC、Spring、MyBatis框架整合,WebService服务调用,SpringBoot微服务架构技术,完成企业级项目开发;

上课周期:5个月

优势点:大专及以上学历,28岁及以下,是我们认为合适的学习条件,名师24小时在线为学员解答疑惑,每个月项目实习答辩,就业指导课,模拟面试,校企合作红章文件,现场校招,这是我们提供的就业保障;

何关于相关专业的问题想要知道都可以联系我,上元教育欢迎您的咨询,一定知无不言,言无不尽!

咨询地址:苏州工业园区新平街388号腾飞创新园A座9楼 6楼

联系人:小吴老师联系方式:18915523323


苏州java培训班|什么是Unsafe与CAS_第2张图片

你可能感兴趣的:(苏州java培训班|什么是Unsafe与CAS)