Java语言提供了一种稍弱的同步机制,即volatile变量,用来确保将变量的更新操作通知到其他线程。当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的值。

当且仅当满足以下所有条件时,才应该使用volatile变量:

  • 对变量的写入操作不依赖变量的当前值,或者你能确保只有单个线程更新变量的值。

  • 该变量不会与其他状态变量一起纳入不变性条件中。

  • 在访问变量时不需要加锁。

例子1(未使用volatile关键字):

执行结果


例子2(使用volatile关键字):

运行结果:


注意:加锁机制即可以确保可见性又可确保原子性,而volatile关键字只能确保可见性

注:本文为Wayne原创,未经许可不得在任何平台转载。如需转载,与作者联系~
关注微信公众号:智识训练营(微信ID:TechBootcamp),可以Java交流qun:16844592,获取更多资讯~

版权声明:本文为bootcamp原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/bootcamp/p/12738376.html