社区
Java SE
帖子详情
关于volatile关键字与javabean的线程安全
hangwen0305
2018-03-28 03:51:41
如果一个javabean会被并发访问,比如读写其定义的属性字段,那么为了确保线程读取字段的值是最新的,是不是意味着这个类所有的字段都要用volatile关键字修饰?
虽然我觉得应该如此,但是在本地写测试代码似乎没有测试出反例,即:不加volatile,也第一时间就读取到了最新值,这是怎么回事呢?是否和JVM的window版本、linux版本有关?又获取与硬件CPU有关?
...全文
752
9
打赏
收藏
关于volatile关键字与javabean的线程安全
如果一个javabean会被并发访问,比如读写其定义的属性字段,那么为了确保线程读取字段的值是最新的,是不是意味着这个类所有的字段都要用volatile关键字修饰? 虽然我觉得应该如此,但是在本地写测试代码似乎没有测试出反例,即:不加volatile,也第一时间就读取到了最新值,这是怎么回事呢?是否和JVM的window版本、linux版本有关?又获取与硬件CPU有关?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zclqianqian
2018-06-20
打赏
举报
回复
声明变量是 volatile 的,JVM 保证了每次读变量都从内存中读,跳过 CPU cache 这一步
weixin_41404782
2018-06-19
打赏
举报
回复
你这种情况,用同步更好。
a1282379904
2018-04-13
打赏
举报
回复
你不把你的测试代码贴出来我们怎么判断呢
maradona1984
2018-03-29
打赏
举报
回复
这个应该跟你写的测试用例有关,或者场景不对
济南大飞哥
2018-03-29
打赏
举报
回复
volatile 个人认为是在多处写的时候用到,如果一写多读,加不加关键字无所谓的,你能在乎几万分之一秒?典型的应用就是double check的单例的使用,内层实例化后,外层立马能感知到,再进入第二层判断时能够得知已经实例化,直接获取,而不是再次实例化。 自己测试得用死循环,模拟大量并发,应该比较难。
YKW_
2018-03-28
打赏
举报
回复
先说结论 为了确保线程读取字段的值是最新的 是要用volatile 其次你说volatile变量涉及读写 那你在操作volatile变量时还要加锁 首先实现并发安全要保证三点:1、原子性 2、可见性 3、有序性 volatile可以保证可见性和一定程度的有序性不可以保证原子性 比如 volatile int i; i++这种操作就不是原子性的 需要注意处理 所以volatile修饰并不是就保证并发安全 还要具体看场景 volatile变量可见性是通过写立即提交到内存和通知失效实现的 有序性是通过内存屏障禁止重排序实现的 以下摘自深入理解java虚拟机 在不符合一下两条规则的运算场景中,仍然要通过加锁来保证原子性 1 运算结果并不依赖变量的当前值,或者能够确保只有单一线程修改变量的值。 2 变量不需要与其他的状态变量共同参与不变约束。 如有不对之处多多指教
oyljerry
2018-03-28
打赏
举报
回复
volatile主要是用在并发读写的场景。这样让读可以得到最新写的数据。遵守happens-before规范
我自横刀香甜笑
2018-03-28
打赏
举报
回复
https://www.cnblogs.com/zhengbin/p/5654805.html
看看这篇文章吧。。。
2023最新,最全,最细的JUC多线程并发教程
紧接着由
线程安全
问题引出 Java 提供的两个解决
线程安全
问题的
关键字
:
volatile
和 synchronized ,并带你们从 hotspot 源码层面详细分析了这两个
关键字
的实现流程。接着就是 Unsafe、CAS、LockSupport、ThreadLocal...
C语言中
volatile
关键字
的使用
volatile
是一个类型修饰符(type specifier),就像我们熟悉的const一样,它是被设计用来修饰被不同线程访问和修改的变量;
volatile
的作用是作为指令
关键字
,确保本条指令不会因编译器的优化而省略,且要求每次直接...
多线程学习-
Volatile
关键字
多线程学习-
Volatile
关键字
Volatile
Volatile
1.1
Volatile
1.1.1
Volatile
的特性 可见性。对一个
volatile
变量的读,总是能看到(任意线程)对这个变量最后的写入。 原子性。对任意单个
volatile
变量的读/写具有...
【Java面试】能说说你对
volatile
关键字
的理解吗?
本文配合字节码来讲解
volatile
关键字
的有序性,非原子性,可见性
Java SE
62,614
社区成员
307,327
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章