volatile关键字详解

一、volatile关键字

Java 允许线程访问共享变量,为了确保共享变量能被准确、一致地更新,线程应该确保通过排他锁单独获得这个变量。Java 提供了关键字 volatile,如果一个变量被声明成 volatile,那么对这个变量写入或者读取时就不需要加锁,Java 线程内存模型能确保所有线程看到这个变量的值是一致的。能让其他线程能够马上感知到某一线程对某个变量的修改。

二、volatile关键字的作用

volatile 关键字的作用主要体现在两方法方面:保证可见性和保证有序性

保证可见性也就是保证了共享变量的“可见性”,可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。

保证有序性是对 volatile 修饰的变量,volatile 之前的代码不能调整到他的后面,volatile 之后的代码不能调整到他的前面。

三、volatile与synchronized的异同

volatile 是轻量级的 synchronized,如果 volatile 变量修饰符使用恰当的话,它比 synchronized 的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。

相同点在于二者均可保证可见性和有序性。

不同点主要体现在以下几个方面:

(1)用法不同。volatile 只能修饰变量;synchronized 只能修饰方法或语句块。

(2)对原子性的保证。volatile不能保证原子性,synchronized 可以保证原子性。

(3)实现原理不同。volatile 对变量加了 lock,synchronized 使用 monitor。

(4)volatile 不会引起阻塞,synchronized 会引起阻塞。

四、参考资料

【1】张振华 Java并发编程从入门到精通[M] 清华大学出版社

【2】放腾飞 魏鹏 程晓明 Java并发编程的艺术[M] 机械工业出版社

【3】https://www.jianshu.com/p/d577c2817af8

【4】https://blog.csdn.net/vking_wang/article/details/9982709

【5】https://www.jianshu.com/p/6efe8d5bd567

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值