为什么80%的码农都做不了架构师?>>>   

在jdk中通过内部提供的Unsafe实现的CAS操作,在这个类的实现中提供了对并发的支持,比如compareAndSwap方法的实现就是原子性的,并且可用来提供高性能、无锁的数据结构。CAS的操作的语义是(compare and set),即比较原值(old)是否和期望(expect)的值相同,如果相同则将该值(old)设置成新值(new)。jdk中的cocurrent包中的atomic、lock、AQS等都是基于该api实现的。

参考资料:

Java并发编程之CAS

使用Java5+提供的CAS特性而不是使用自己实现的的好处是Java5+中内置的CAS特性可以让你利用底层的你的程序所运行机器的CPU的CAS特性。这会使还有CAS的代码运行更快。

聊聊并发(二)Java SE1.6中的Synchronized

2 术语定义

术语 英文 说明
CAS Compare and Swap 比较并设置。用于在硬件层面上提供原子性操作。在 Intel 处理器中,比较并交换通过指令cmpxchg实现。比较是否和给定的数值一致,如果一致则修改,不一致则不修改。

Java Magic. Part 4: sun.misc.Unsafe

在使用Unsafe之前,我们需要创建Unsafe对象的实例。这并不像Unsafe unsafe = new Unsafe()这么简单,因为Unsafe的构造器是私有的。它也有一个静态的getUnsafe()方法,但如果你直接调用Unsafe.getUnsafe(),你可能会得到SecurityException异常。只能从受信任的代码中使用这个方法。

Field f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
Unsafe unsafe = (Unsafe) f.get(null);

JEP 193: Variable Handles

Motivation

As concurrent and parallel programming in Java continue to expand, programmers are increasingly frustrated by not being able to use Java constructs to arrange atomic or ordered operations on the fields of individual classes; for example, atomically incrementing a count field. Until now the only ways to achieve these effects were to use a stand-alone AtomicInteger (adding both space overhead and additional concurrency issues to manage indirection) or, in some situations, to use atomic FieldUpdaters (often encountering more overhead than the operation itself), or to use the unsafe (and unportable and unsupported) sun.misc.UnsafeAPI for JVM intrinsics. Intrinsics are faster, so they have become widely used, to the detriment of safety and portability.

Without this JEP, these problems are expected to become worse as atomic APIs expand to cover additional access-consistency policies (aligned with the recent C++11 memory model) as part of Java Memory Model revisions.

转载于:https://my.oschina.net/u/914290/blog/801039

说说你对Jdk并发包中的CAS实现的了解?相关推荐

  1. java 同步包_Java并发程序设计(四)JDK并发包之同步控制

    JDK并发包之同步控制 一.重入锁 重入锁使用java.util.concurrent.locks.ReentrantLock来实现.示例代码如下: public class TryReentrant ...

  2. Java并发程序设计(四)JDK并发包之同步控制

    JDK并发包之同步控制 一.重入锁 重入锁使用java.util.concurrent.locks.ReentrantLock来实现.示例代码如下: public class TryReentrant ...

  3. jdk并发包里常用的类

    jdk并发包里常用的类 资料 并发编程 :Concurrent 用户指南 ( 上 ) 并发编程 :Concurrent 用户指南 ( 中 ) 并发编程 :Concurrent 用户指南 ( 下 ) C ...

  4. 并发编程笔记——第六章 Java并发包中锁原理剖析

    一.LockSupport工具类 JDK中的rt.jar包里的LockSupport是个工具类,它的主要作用是挂起和唤醒线程,该工具类是创建锁和其他同步类的基础.LockSupport类与每个使用它的 ...

  5. Java高并发程序设计(三)——JDK并发包(二)

    引言 好久没来学习Java高并发程序设计了,感觉在慢慢遗忘之前学过的内容,今天打算重新拾起. Condition Condition与前两章讲的Object.wait() 和Object.notify ...

  6. Java高并发程序设计(三)——JDK并发包(一)

    引言 读书读了一个多月了,这个月工作很多,空闲时间少,但是我还是在每天上班之前,下班之后挤出零星的时间写写博客,看看社区.每天下班以后,经常搜一些最近学习的相关知识点来加深理解.上次我介绍了前两章的内 ...

  7. Java并发包中常用类

    Java并发包中常用类小结(一) 从JDK1.5以后,Java为我们引入了一个并发包,用于解决实际开发中经常用到的并发问题,那我们今天就来简单看一下相关的一些常见类的使用情况. 1.Concurren ...

  8. 每天一例多线程[day14]----JDK并发包Queue队列

    队列简介 关于什么时候使用MQ消息队列,什么时候使用JAVA自带队列,有一些基本的原则,如下图: 生产者:生产消息的速度很慢,缓慢地放入MQ中存储. 消费者:消费能力强,快速处理掉MQ中的消息. 这种 ...

  9. Java并发包中常用类小结(一)

                                   Java并发包中常用类小结(一) 从JDK1.5以后,Java为我们引入了一个并发包,用于解决实际开发中经常用到的并发问题,那我们今天就来 ...

最新文章

  1. SAP各种产品中的客户主数据模型建模详解
  2. ASP.NET系统退出(移除Session 、清除浏览器缓存)
  3. C++之new和delete探究
  4. python classmethod static_python classmethod和 staticmethod的心得
  5. 红帽:将开源进行到底!
  6. Shell脚本学习-阶段十二-在CentOS 7上给一个网卡分配多个IP地址
  7. 企业员工考勤管理子系统
  8. html5经纬度定位 源码_HTML5获取地理经纬度并通过百度接口得到实时位置
  9. Luogu 3332 [ZJOI2013]K大数查询
  10. matlab的gca和gcf,MATLAB 中gcf、gca 以及gco 的区别
  11. A woman without arms
  12. Android 获取手机状态栏高度
  13. 金秋杭州游 只为桂花香
  14. 无接触招聘,AI催生HCM SaaS新动向
  15. 用js实现动态添加表格数据
  16. c# 将EF查询出的日期格式化
  17. EndNote20 快速入门
  18. BGP专线 解决南北互联互通
  19. 盛迈坤电商:自然流量怎么样打造爆款
  20. 伤脑筋的bridge模式-我不明白。。

热门文章

  1. .form文件_含文件上传的form表单AJAX提交小结
  2. 元素周期表排列的规律_元素周期表排列规律
  3. qq如何用其他进制登录
  4. click group实例
  5. 03 unix 设计哲学和流重定向
  6. postgres 密码更改
  7. d3 v4 api interpolate
  8. python与线性代数 向量方程
  9. python 生成器 generator
  10. Linux 查看命令