前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >读者投稿:volatile与synchronized的区别?

读者投稿:volatile与synchronized的区别?

作者头像
彤哥
发布2020-01-17 15:20:00
3220
发布2020-01-17 15:20:00
举报
文章被收录于专栏:彤哥读源码彤哥读源码

本文由“全村的希望”读者投稿。

这个问题可以从Java内存模型方面来回答,Java内存模型主要是围绕在并发过程中如何处理原子性,可见性,有序性这三个特征来建立的。

volatile关键字可以保证线程间变量的可见性,还有包含了禁止指令重排序的语义,满足了有序性。

synchronized关键字原子性(排它锁),可见性,有序性都可以满足。因此它们的区别就在于原子性了。

PS:

上述特性可以从先行发生happens-before原则在来解释一下。先行发生是Java内存模型中定义的两项操作的偏序关系。第三条,volatile变量规则:对一个volatile变量的写操作先行发生于读操作,满足可见性。第二条,管程锁定原则:一个unlock先行发生于后面同一个锁的lock,满足有序性。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 彤哥读源码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档