栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

concurrent 原子类 AtomicBoolean JDK17日记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

concurrent 原子类 AtomicBoolean JDK17日记

首先该原子类 中有一个 volatile 字段

 这个字段实际用来表示 原子类 对应的结果 (TRUE / FALSE)  value 默认为0 即结果为false

 其中 显式传参为true value=1 否则 value=0

接下来 下面就是方法调用 在这之前需要了解一个变量

VarHandle 这个类 是JDK 9中新增的类 目的是 为了替换 以往复杂的原子类的原子操作

具体可以去了解 VarHandle 这个类  本文中 VALUE 变量代表 上文 value 的引用 

目的是操作value 的值 因为 VarHandle 可以处理 (非静态 静态 数组 通过反射获得的Field )类型字段 具体大家可以百度

 上图方法使用了 VarHandle 中的 compareAndSet 方法 目的是使用CAS 操作

因为CAS 操作不了boolean 值 只能给他转化为数字 进行 CAS操作

要注意的是注释的一句话 with memory effects as specified by VarHandle.compareAndSet

意思就是 这个方法实际使用compareAndSet 方法对内存完成整个变量的修改 (当然成功与否 是看能不能抢到锁) 那这个方法 的内存语义进一步的又是什么的?其实就是

setVolatile 这个方法的语义 从这个方法名理解 就是 这个变量是由 volatile 修饰的

对这个变量赋值  同时 对其他线程可见

 

 上图这个方法 看名字 你就很 心虚 weak 而且注释也明明白白的告诉你 possible atomically

大概意思是可能成功 可能失败 他的内存语义对应的是

没有volatile 和 final 修饰 这个变量修改就不会一定成功 其实就是声明一个普通变量 对其进行set

只不过不保证能成功

上图 也是set 方法 但是 它的内存语义 就不是简单的set 而是 setVolatile 因为 value 本身就是 volatile 修饰的 

如上图 此方法的内存语义是 VarHandle.setRelease 具体就是如下

 

主要是确保先前的load(读操作) 和 store(写操作) 不会重排序到此操作后面 (指令重排序)

如上图 其实就是先get 再set 也是 volatile 语义的

上图的get()方法也是volatile 语义的 就是个toString() 方法

  

上图就是一个获取普通的变量的方法 没有volatile 修饰语义的那种

 

这个类似 就是 set 方法 没有volatile 修饰的那种

上图 这个方法 的内存语义  

按程序顺序访问 但是 相对于其他线程不保证看到的顺序是对应的按程序顺序执行 容易发生内存重排序

 

这个方法也是如此 执行顺序对其他线程来说不是透明的 容易发生内存重排序

 

内存语义是  

 

确保后续的load 和 store 不会重排序到此方法调用之前 (指令重排序)

 

这个方法解释过了 下一个

 

这个就相当于cas 只不过区别在于 这个

compareAndExchange 方法 返回值 被强转为int 因为最后是 boolean 所以加了个不等于 0 的判断 

至于那个compareAndSet 直接返回结果

该方法 是 set 语义 和 getAcquire 语义 组合起来的 

 

该方法是 setRelease 语义和 get 语义 组合起来

 

这个方法的语义是

 

 

如果变量的当前值(称为见证值)=预期值(使用getVolatile的内存语义访问),则可以使用setVolatile的内存语义将变量的值原子地设置为newValue。

即使见证值与预期值匹配,此操作也可能会错误失败(通常是由于内存争用)

这个方法的语义 是 set 和 getAccquire 的组合 这个也容易失败

 

这个方法的语义是 setRelease 和 get 组合  也容易失败

这就是个日记 大家有什么想法 可以告诉我 我能力一般 只能浅析 谢谢 ⛵

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/295190.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号