本文由“全村的希望”读者投稿。
这个问题可以从Java内存模型方面来回答,Java内存模型主要是围绕在并发过程中如何处理原子性,可见性,有序性这三个特征来建立的。
volatile关键字可以保证线程间变量的可见性,还有包含了禁止指令重排序的语义,满足了有序性。
synchronized关键字原子性(排它锁),可见性,有序性都可以满足。因此它们的区别就在于原子性了。
PS:
上述特性可以从先行发生happens-before原则在来解释一下。先行发生是Java内存模型中定义的两项操作的偏序关系。第三条,volatile变量规则:对一个volatile变量的写操作先行发生于读操作,满足可见性。第二条,管程锁定原则:一个unlock先行发生于后面同一个锁的lock,满足有序性。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有