java 板


LINE

※ 引述《pzyc79 (English Idiot 简称EI)》之铭言: 推你的研究精神! 学程式就该这样做 这个问题我曾经花一个暑假仔细研究过,并写了一系列文章供人参考︰ http://eoffice.im.fju.edu.tw/phpbb/viewtopic.php?t=6280 你可以参考 volatile 那小节 : 如题 : 我已经找过google、javaworld都找不到满意的答案 : 要嘛就是说他是什麽强制Thread不能用内存要去读记忆体 没范例 : 要嘛就是有简单的程式范例 但是我实作结果又跟说的不一样 : 1.class Test { : 2. static volatile int i = 0, j = 0; : 3. static void one() { i++; j++; } : 4. static void two() { : 5. System.out.println("i=" + i + " j=" + j); : 6. } : 7.} : 这个 : 他说i和j会同时更新 但是印出来i和j还是会不一样啊 如果有文献跟你讲上面例子的变数用 volatile 修饰过可以让 i 和 j 印出来一样 那个资料可以直接丢了!!!这根本和 volatile 没什麽直接关系!! 在概念解释之前,你要先知道,JVM 不是单指一支摆在 Oracle 官网供你下载的程式 JVM 只是一个执行 Java bytecode 的软体规格。 凡是有照规格做出来可以执行 java bytecode 的程式都算是 JVM, 你 JVM 的能力可以做得跟规格一样,也可以做得比规格书要求的更多 原始官方 JVM 规格对 volatile 修饰字的要求很简单,大意就只有这样︰ 「不同执行绪对 volatile 修饰过的变数存取之间要存在 happens-before 关系」 至於什麽是 happens-before? 因为官网解释又臭又长还不直观, 我简单精简成一个重点︰ 「读取 volatile 变数的执行绪,要能读得到最後更新的值。」 只要那个 JVM 能让 volatile 变数达到上述效果,就符合规格啦~ volatile 修饰字的效果,也就仅仅这样而已~ 就算你再怎麽不解,规格书上定义的效果也就只有这样.... : 这个 : 他说如果不用volatile会导致无限循环 可是明明不写volatile呼叫tellMeStop : 他还是会停下来阿 : 到底是怎样我快疯了 这个问题,我觉得是因为现在 JVM 做的远比规格还要多 老实说,要用现在的 JVM 跑程式证明多执行绪下, 变数有没有 volatile 修饰究竟差在哪,还真是难~~ 我写过很多程式想证明这件事,却发现总是很难分离其他影响因素. 例如常常一不小心为了用不同变数比较执行效果,就跟 synchronized 混在一起了。 问题是规格书也要求 synchronized 区域里面的变数要有 happens-before 关系, 一旦混在一起,根本就没办法证明 happens-before 效果究竟是从哪个语法来的。 而且有时候 JVM 似乎会自动帮你解决这些 memory inconsistency 的问题, 这让我们更是感觉不到 volatile 究竟是什麽,它又在干麻.... 你现在的情境就好像是拿不完全正确的 html 语法去给浏览器跑, 结果却发现还是有画面一样.... 虽然语法有一些可能会造成问题的点,但因为浏览器做的比规格要求的还多, 所以最後还是能显示.... 至於你提到的暂存器问题,那只是底层为了做到 volatile 规格定义的效果所做的 一些事,其实重点不是底层究竟做了哪些事,而是 volatile 究竟有什麽效果 这部分才是学语言该聚焦的地方 你现在会看到那些不知所云的资料,多半因为它想用底层的实作方式解释 volatile 定义的效果....但这教法只有说给那些学过底层的人听才合适 这就像是刚学程式语言,不懂 class 是什麽概念的人,解答的人却用一堆底层的 细节来说明,只是徒增听者的困扰而已.... --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.136.155.111
1F:推 cooper6334:用恐龙本的说法,volatile会让存取变数变atomically罗? 04/18 15:28
※ 编辑: dream1124 来自: 140.136.160.132 (04/18 16:46)
2F:推 aecho:回一楼,是的。所以可以代替synchonized昂贵的lock/unlock 04/19 08:14
3F:推 tomap41017:推这篇文章,感谢大大一个暑假的心得分享:) 04/19 21:52
4F:→ calais007:我以前也是知道volatile功能但却找不到code来验证他 04/20 21:52
5F:推 kiffy:推好文 05/06 10:54







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP