Java - volatile关键字的介绍

Java中的volatile关键字功能和用法

首先简要了解一下Java虚拟机的内存模型
Java把所有的变量都存在主存(相当于物理内存)当中,每个线程都有自己的工作内存(相当于CPU高速缓存)。线程在 自己的工作内存中做操作,不能直接对主存进行操作,最后把结果返回到主存。

其次就是关于volatile关键字
如果一个变量有 volatile 修饰词,这意味着:当有一个线程修改了这个变量,系统会把工作内存当中的变化强制立刻返回到主存当中。当其他线程读取这个变量的时候,读取的是变化了的新值。
volatile其实就保证了此变量无论怎么变, 任何线程看都是最新的。当两个线程,根据一个共同的信号,做互动时,一定要加volatile,保证这个信号是最新的。

实例
我们使用 单例模式 的创建类的方法来进行演示,假设每次得到的类Emperord的对象都是同一个对象:

public class Emperor{
	//volatile关键字保证emperor在所有线程中都同步,都是最新的一个值
	private static volatile Emperor emperor = null;
	//构造方法私有化,避免在类的外部创建对象
	private Emperor(){}
	//synchronized保证线程之间进行排队
	public static synchronized Emperor getInstance(){
		if(emperor == null)
			emperor = new Emperor;
		return emperor;
}

不管有多少线程同时调用getInstance()方法,获取到的都是唯一的一个最新的Emperor的对象。另外对sychronized关键字陌生可以查看我的这一偏博客:显式锁与隐式锁的异同

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值