社区
非技术区
帖子详情
volatile是什么??
zhoufanking
2004-03-09 12:40:38
看demo/clock程序时,看到的。
...全文
91
2
打赏
收藏
volatile是什么??
看demo/clock程序时,看到的。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
volatile
为什么能禁止指令重排 ??
1 什么是指令重排? Java 内存模型允许编译器和处理器对指令重排序以提高运行性能, 并且只会对不存在数据依赖性的指令重排序。在单线程下重排序可以保证最终执行的结果与程序顺序执行的结果一致,但是在多线程下就会存在问题。 int i = 1; //(1) int j = 2; //(2) int k = i + j; //(3) 如上代码,变量K的值依赖 i 和 j 的值,所以重排序后能操作 (3) 的操作在 1,2之后。1和2谁先执行就不一定了,不过在单线程中不会有什么问题,下面看一个多线程的例子: p
对
volatile
int的单写多读??
我已经不止一次听到关于
volatile
int的安全读写方面的谬论了。最常见的是
volatile
int的变量的单写多读操作是多线程安全的。这个结论很搞笑,因为每当支持这个节论的人给我讲一大堆诸如锁总线,原子指令方面的东西时,(权且当他们都说的全对)我几乎都可以反问他:根据你的结论,
volatile
int是也多线程写安全的(串行的)。那些搞并发编程的人难道都是吃饱了撑的,搞什么锁来玩的?好了,谈些基本点,基于c语言标准:1。
volatile
的行为是不可移植的(基于编译器,编译器基于cpu)。c语言另外一个
volatile
关键字原理???
volatile
解决指令重排和内存可见性的原理?? synchronized 关键字和
volatile
关键字的区别??
volatile
关键字作用???
volatile
解决指令重排和内存可见性的原理?? 1、内存可见性,修饰的变量发生改变之后对所有线程立即可见 通过插入内存屏障来保证的。 2、 禁止指令重排序 通过上面Java内存模型的概述,我们会注意到这么一个问题,每个线程在获取锁之后会在自己的工作内存来操作共享变量,操作完成之后将工作内存中的副本回写到主内存,并且在其它线程从主内存将变量同步回自己的工作内存之前,共享变量的改变对其是不可见的。即其他线程的本地内存中的变量已经是过时的,并不是更新后的值。 synchron
细说DCL单例模式和
volatile
有什么关系,
volatile
在DCL中是必要的吗??
摘要: DCL(双重检查锁定)是Java实现线程安全单例的高效方式。标准代码通过两次if检查兼顾性能与安全:外层避免无谓锁竞争,内层防止重复创建。关键点在于
volatile
修饰实例变量,禁止new操作的指令重排序(1-3-2乱序),避免返回未初始化的"半成品对象"。其底层通过内存屏障和Happens-before规则(
volatile
写读顺序+传递性)确保线程安全。面试需强调:仅synchronized无法保证有序性,
volatile
解决了重排序引发的可见性问题。(149字)
掉了两根头发,可算是把
volatile
整明白了
为什么只能保证可见性?又是怎么实现禁用指令重排?哇,原来这么简单
非技术区
23,404
社区成员
70,507
社区内容
发帖
与我相关
我的任务
非技术区
Java 非技术区
复制链接
扫一扫
分享
社区描述
Java 非技术区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章