开发者社区> 问答> 正文

有了synchronized,还需要volatile做什么事?

有了synchronized,还需要volatile做什么事?

本问题来自阿里云开发者社区的【11大垂直技术领域开发者社群】。 点击链接欢迎加入感兴趣的技术领域群。

展开
收起
游客pklijor6gytpx 2019-11-11 14:37:02 7501 0
4 条回答
写回答
取消 提交回答
  • 因为volatile可以禁止指令重排序

    2020-08-03 21:09:10
    赞同 展开评论 打赏
  • 一方面是因为synchronized是一种锁机制,存在阻塞问题和性能问题,而volatile并不是锁,所以不存在阻塞和性能问题。 另外一方面,因为volatile借助了内存屏障来帮助其解决可见性和有序性问题,而内存屏障的使用还为其带来了一个禁止指令重排的附件功能,所以在有些场景中是可以避免发生指令重排的问题的。

    2019-12-12 14:34:31
    赞同 展开评论 打赏
  • 补充1楼,volatile保证了变量在多个线程间的可见性,可以有效避免脏读现象

    2019-11-27 12:46:30
    赞同 展开评论 打赏
  • volatile可以禁止指令重排序,在双重校验锁实现单例的时候,虽然使用了synchronized关键字,但是如果不用volatile修饰单例对象,就会存在问题。

    2019-11-11 14:38:06
    赞同 1 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载