美文网首页
volatile原理和使用场景

volatile原理和使用场景

作者: 猿必过 | 来源:发表于2021-03-09 23:49 被阅读0次

volatile 关键字只能用于修饰变量,无法用于修饰方法。并且 volatile 只能保证可见性,但不能保证操作的原子性。

在具体编程中体现为:volatile 只能保证基本类型以及一般对象的引用赋值是线程安全的。

volatile工作原理

为什么 volatile 只能保证可见性,不能保证原子性呢?这跟它的工作原理有关。

  • 线程写 volaitle 变量的步骤为:

    • 改变线程工作内存中 volatile 变量副本的值

    • 将改变后的副本的值从工作内存刷新到主内存

  • 线程读 volatile 变量的步骤为:

    • 从主内存读取 volatile 变量的最新值到线程的工作内存中

    • 从工作内存中读取 volatile 变量的副本

由于在整个过程没有涉及到锁相关的操作,所以无法保证原子性,但是由于实时刷新了主内存中的变量值,因此任何时刻,不同线程总能看到该变量的最新值,保证了可见性。

volatile使用场景

要在多线程中安全的使用 volatile 变量,必须同时满足:

  • 对变量的设置操作不依赖其当前值

    • 不满足举例:number++、count = count + 5
    • 满足举例: boolean 变量等
  • 该变量没有包含在具有其他变量的不等式中

    • 不满足举例:不变时 low < up

在实际项目中,由于很多情况下都不满意 volatile 的使用条件,所以 volatile 使用的场景并没有 synchronized 广。

本文由猿必过 YBG 发布
禁止未经授权转载,违者依法追究相关法律责任
如需授权可联系:zhuyunhui@yuanbiguo.com

相关文章

  • 互联网JAVA面试常问问题(三)

    一、volatile原理和使用场景 volatile 原理 volatile变量进行写操作时,JVM会向处理器发送...

  • volatile原理和使用场景

    volatile 关键字只能用于修饰变量,无法用于修饰方法。并且 volatile 只能保证可见性,但不能保证操作...

  • volatile 和原子类的异同,画个图理解一下

    volatile和原子类 原子类和 volatile 的使用场景 总结 volatile和原子类 我们首先看一个案...

  • volatile原理和使用

    Volatile实现轻量级的同步锁,原理: 1.禁止指令重排。 2. 多线程可见性。 java 语言提供了一种稍弱...

  • volatile的原理和使用

    1.对线程的可见性 Java的volatile关键字声明使变量对不同线程具有可见性。程序在多线程操作non-vol...

  • Java volatile变量 原理与应用

    本文讨论volatile的原理和应用场景,涉及多线程内存模型、指令重排(代码执行次序)、Happens-befor...

  • volatile原理(分享)

    最近回归Java基础的一些内容,其中volatile的核心原理不是很理解(大概知道限制指令重排 但是什么场景使用还...

  • volatile使用场景

    volatile适用场景双重检查锁定(double-checked-locking)问题描述 转载自https:/...

  • volatile的使用场景

    volatile的使用场景 使用volatile修饰的变量最好满足以下条件: 对变量的写操作不依赖于当前值 该变量...

  • AbstractQueuedSynchronizer(AQS)初

    一、 Concurrent包的实现原理: 由于Java的CAS同时具有volatile读和volatile写的内存...

网友评论

      本文标题:volatile原理和使用场景

      本文链接:https://www.haomeiwen.com/subject/ayyiqltx.html