JAVA volatile关键字的疑问

synchronized 关键字可以保证可见性吗?

请问synchronized可以保证可见性吗,可是在双重检查加锁的时候为什么还要用volatile 关键字保证变量的可见性?

#21天打卡剑指offer##Java#
全部评论
就是因为这个双重校验锁我和字节的三面面试官怼了10分钟,我从指令重排去解释,他非说不需要volatile关键字
2 回复 分享
发布于 2020-04-19 21:52
自己看源码
点赞 回复 分享
发布于 2020-04-19 20:47
变量的赋值操作依然可以被编译器优化,此时就有可能会发生指令重排序,加volatile就为了防止指令重排序(不知道说的对不对)(狗头保命)🤣🤣
点赞 回复 分享
发布于 2020-04-19 20:57
https://blog.csdn.net/qq_33589510/article/details/105319129 看我的博客解释
点赞 回复 分享
发布于 2020-04-19 22:59
创建对象时候会导致其他线程访问到空对象,所以要加volatile加内存屏障
点赞 回复 分享
发布于 2020-04-21 08:05
凡事都加锁,未免有点太重量级了
点赞 回复 分享
发布于 2020-04-21 08:51
看周志明那本JVM,关于dcl的有解释
点赞 回复 分享
发布于 2020-04-23 00:27
知识点 happen-before可见性和volatile的防止重排序,两个对同一个对象的锁内写,对下一次该对象的锁内读是可见的,这是HB规则的一条。DCL初始化以后都是非锁读的,但是由于可能的指令重排序,这就有个问题,初始化可能没完成就被读到了,volatile的目的是防止这种情况
点赞 回复 分享
发布于 2020-05-13 18:14

相关推荐

2024-11-26 14:32
门头沟学院 Java
shanxin233:我说下我了解的神州信息。天津那边好像是人力型的外包。融信分公司啥的的话是神州信息的正编,他是乙方,做的银行项目,但是也要出差驻场,出差补贴60每天,项目经理会管房,第一年无年终,1个月年终拿到手的年终大概是0.7月的样子,每年一次薪资调整,幅度在1000左右。强度大部分996,午休两小时,下午1.5小时。有的项目组965。
神州信息工作强度 18人发布 投递神州信息等公司9个岗位
点赞 评论 收藏
分享
评论
1
4
分享
牛客网
牛客企业服务