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

相关推荐

面试体验不是很好,过程中多次被面试官打断一上来HR问我英语水平怎么样,然后要我用英文做个自我介绍,给我整懵了,憋了半天,只说了 my name is "在看机会的奶酪很喜欢吃蛋",只能尴尬而不失礼貌的微笑;面试官迟到了几分钟后进来了,开始八股拷打:1. 英语口语不太行,需要多久才能用英语进行基本的沟通交流?2. 说说实习遇到的难点  a. 说了一小会直接被打断,可能是我前面讲背景有点啰嗦了,导致面试官不想听了3. 在学校有做过商户or电商相关的系统吗?4. 做过哪些项目,你觉得比较好的?5. 怎么在10亿条数据里,找某一条数据是否存在6. 了解哪些Java基础知识,学过哪些语言7. 怎么看待不同的语言,你是怎么选择语言的?个人兴趣呢?8. 你觉得你的代码风格怎么样,你的同学对你的代码风格评价怎么样?9. 看过多线程哪些方法和类?10. synchronized和ReentrantLock的区别11. Synchronized和ReentrantLock在内核态和用户态有什么变化,优劣点?(不会。。)12. synchronized的可重复锁是怎么实现的?13. ReentrantLock是怎么通过AQS实现的?14. AQS的数据模型看过吗(不会)15. 怎么使用synchronized和reentrantlock?16. synchronized修饰对象和类的区别17. 怎么实现abc三个线程的值交换18. 怎么交替打印,线程1打印:1 2 3 4 5 6 7 线程2打印:a b c d e f g h ,最终的效果:1 a 2 b 3 c 4 d 5 f 6 g 719. 有用过Spring cloud 吗20. 怎么使用Semaphore?21. innodb引擎你了解多少22. innodb是怎么实现事务的?23. 为什么要保障事务?不保证事务有什么问题24. 幻读问题是怎么产生的,怎么解决?25. 临建锁是怎么实现的,让你自己写代码的话(不会。。)26. 怎么设计一个秒杀系统,你会考虑哪些东西,要注意什么?最后和面试官单独聊下,说基础还需要再加强,知识点不够深入,考虑的东西太浅了,建议我多看书多看博客学习
点赞 评论 收藏
转发
1 4 评论
分享
牛客网
牛客企业服务