在JDK 5之后,Java类库中才开始使用CAS操作,该操作由sun.misc.Unsafe类里面的compareAndSwapInt()和compareAndSwapLong()等几个方法包装提供。HotSpot虚拟机在内部对这些方法做了特殊处理,即时编译出来的结果就是一条平台相关的处理器CAS指令,没有方法调用的过程,或者可以认为是无条件内联进去了[插图]。不过由于Unsafe类在设计上就不是提供给用户程序调用的类(Unsafe::getUnsafe()的代码中限制了只有启动类加载器(Bootstrap ClassLoader)加载的Class才能访问它),因此在JDK 9之前只有Java类库可以使用CAS,譬如J.U.C包里面的整数原子类,其中的compareAndSet()和getAndIncrement()等方法都使用了Unsafe类的CAS操作来实现。而如果用户程序也有使用CAS操作的需求,那要么就采用反射手段突破Unsafe的访问限制,要么就只能通过Java类库API来间接使用它。直到JDK 9之后,Java类库才在VarHandle类里开放了面向用户程序使用的CAS操作。
相关文章
- 08-17在web中的分页操作
- 08-17在forEach回调函数中存在异步操作的处理
- 08-17java – Spring中的数据库写锁实体
- 08-17120 Python程序中的线程操作-队列
- 08-17leetcode [701. 二叉搜索树中的插入操作](https://leetcode-cn.com/problems/insert-into-a-binary-search-tree/)
- 08-17ORM操作中管理对象的获取及使用
- 08-17STM32中的位带(bit-band)操作
- 08-17java 中局部变量在栈内存中的复制
- 08-17ios中多线程GCD NSOperation NSThread 相关的操作解析
- 08-17python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)