volatile变量使用姿势

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

在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比sychronized关键字更轻量级的同步机制。

volatile变量的正确使用方式包括:确保它们自身状态的可见性,确保它们所引用对象的状态的可见性,以及标识一些重要的程序生命周期事件的发生(例如,初始化或关闭)。

注意:volatile不确保变量的原子性操作。而加锁机制既可以确保可见性又可以确保原子性,而volatile变量只能确保可见性。

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

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

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

3)在访问该变量时不需要加锁。

 

你可能感兴趣的:(Java,Java内存模型,volatile,Java多线程,线程安全)