网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
可签
7
级以上的吧
50
个
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
03月09日
漏签
0
天
java吧
关注:
1,248,522
贴子:
12,730,858
看贴
图片
吧主推荐
视频
游戏
11
回复贴,共
1
页
<返回java吧
>0< 加载中...
关于java的Volatile
只看楼主
收藏
回复
LIghhTerS
淼
3
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
学习单例模式时候了解到volatile能禁止指令重排(对于new Object()的具体指令:分配内存空间,设置地址,对象初始化)
,接着搜索了解到java代码执行顺序也能被重排(也算是指令重排?)
,比如这里的ready没有被volatile修饰,理论上count是有可能大于0的,但是我多次执行代码count都没有大于0,是因为"java代码执行顺序也能被重排"是错的吗,如果不是如何能让这种错误出现的机会更大?
送TA礼物
IP属地:广东
1楼
2024-01-16 02:31
回复
一天天武
淼淼淼淼
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
java指令这个应该是没有指令重排的。jvm应该是不会实现这个的。
我搜jvm规范里面,这个关键字介绍很短,就是说了这个关键字是刷新缓存。
IP属地:湖南
来自
Android客户端
2楼
2024-01-16 07:38
回复(1)
收起回复
官渡区天互软件开发工作室
Vue2+Vue3,低代码/无代码,分布式,单体式,工作流引擎,流程设计器,表单设计器,规则引擎,代码生成器,SaaS多租户,接口集成引擎,页面视图引擎,数据报表引擎,BI大屏引擎
2025-03-09 16:35
广告
立即查看
一天天武
淼淼淼淼
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
这说的太简单了,可见性我理解,比如说改了以后立马刷新所有的CPU缓存。强制它们重新从内存取。
但是这个和指令重排序有啥关系呢?
IP属地:湖南
来自
Android客户端
3楼
2024-01-16 07:58
回复
收起回复
一天天武
淼淼淼淼
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
JVM里面也只是标注,不能够被缓存。
IP属地:湖南
来自
Android客户端
4楼
2024-01-16 08:02
回复
收起回复
一天天武
淼淼淼淼
12
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
应该就这样了,内存屏障就会禁止指令重排序。最重要的原因是jvm的指令并不都是原子操作的。
IP属地:湖南
来自
Android客户端
6楼
2024-01-16 08:15
回复(1)
收起回复
绑架邻居的黑猫
淼淼沝
8
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
你这个不是重排序的问题 你这个测试代码表现出来得是可见性问题 。下面几点
1: 线程启动 != 线程执行 也就是 t1 和 t2 谁先执行不是决定得而是创造系统觉得 start() 并不会立马执行 它要受操作系统调度决定
2:t1 和 t2 有可能不在一个CPU上执行(虽然这个几率不大) 那么对于 read 这个变量 所处于各自CPU的cacheLine 不会被保证同步 也就是如果t1 在CPU 1 上执行 read = true t2 在CPU2 上的 read 所在的cacheline 不会被通知作废 自然也不会被更新 JMM不保证
3: java代码执行顺序也能被重排 这句话是不对的 通常是指令排序。这个代码可能被编译器优化了(大概率) 需求看汇编 。
4: 两个线程执行代码 t1 ,t2 他们共享一个变量 这里read 或者 他们存在先后关系 指令也可能被重排序。
IP属地:湖北
8楼
2024-01-16 13:36
回复(1)
收起回复
绑架邻居的黑猫
淼淼沝
8
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
你要明白volatile 是一种规范 是JAVA 对单个原子操作(指令级别的)的线程安全保证。 volatile的怎么保证的,细节就和 CPU 指令架构, Cpu CacheLine ,并发协议(例如mesi) ,内存屏障有关系。你只需要知道 并发问题是有个先后顺序的 。通常重排序导致的并发问题是非常隐秘。大多是可见性问题 和原子操作问题。
例如:
1: 两个线程 t1,t2 同享一个变量 a 。如果这两个线程执行不在一个CPU上。 那么 t1 改变a ,t2是不会被保证立马知道 甚至都不会被保证知道。
2: 如果t1,t2 是同一个CPU 那么就会出现原子操作问题 也就是 你的store操作 也就是read = true 是 多指令操作 而load 操作是单指令 。注意CPU执行架构是流水线式的 也就是一个操作会被分割成多个子命令 同类型的子命令(不存在依赖关系) 会一起执行 尽量减少CPU流水线暂停。
3: 才是重排序问题。也就是重排序只会的指令会 使CPU流水线更高效。
更细节的东西 你需求去掌握操作系统设计
IP属地:湖北
12楼
2024-01-17 13:50
回复
收起回复
绑架邻居的黑猫
淼淼沝
8
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
IP属地:湖北
13楼
2024-01-17 13:59
回复
收起回复
武汉市积墨智能科技
java
的毕业论文-万字全文一分钟生成,全文可预览,基于深度推理模型微调,查重,AIGC包过,依托庞大的论文库数据训练,书写流畅无AI味,参考文献真实可查
2025-03-09 16:35
广告
立即查看
LIghhTerS
淼
3
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
谢谢绑架邻居的黑猫的回答,太厉害了
。
IP属地:广东
14楼
2024-01-17 14:35
回复
收起回复
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧热议榜
1
如何评价明日方舟本次剧情
2238480
2
把杰出女性尊称为先生合适吗
1905967
3
这个吧在抽电视
1446620
4
小米SU7U车主飙车时速300公里
1053108
5
詹姆斯腹股沟拉伤缺阵数周
746148
6
薛凯琪悼念方大同被骂炒作
580950
7
东契奇接棒湖人门面
486720
8
大学扩招是公平还是通胀
469545
9
怎么看《雄狮少年》发维权声明
394262
10
刺客信条影口碑回暖
356790
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示