`

关于volatile

 
阅读更多

Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。

Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。

这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。

而volatile关键字就是提示VM:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。

使用建议:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。

由于使用volatile屏蔽掉了VM中必要的代码优化,所以在效率上比较低,因此一定在必要时才使用此关键字。

分享到:
评论

相关推荐

    关于volatile关键字的说明以及测试

    以下是一些关于volatile关键字的关键知识点: 1. **内存语义**:volatile变量具有特殊的内存语义,它告诉编译器该变量的值可能会在不通过执行任何代码的情况下发生变化。因此,编译器不会对volatile变量进行优化,...

    Volatile.pdf

    但是,基于上述分析,我们可以推断文档可能提供了一个关于volatile关键字的教程或指南,包括但不限于以下知识点: 1. volatile关键字的基本概念和使用方法。 2. volatile对变量可见性的保证。 3. volatile防止...

    learning-volatile

    B1234 volatile volatile volatile volatile volatile

    volatile关键字解析

    volatile关键字解析

    c语言关键字volatile

    嵌入式系统开发中,经常用到volatile 和const关键字,本文针对这2个关键字的基本用法,进行讲解

    volatile变量详解

    volatile 变量详解 volatile 变量是一种特殊类型的变量,关键字 volatile 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。简单地说就是防止编译器对代码进行优化。 volatile 变量的...

    解析java中volatile关键字

    Java中的`volatile`关键字是多线程编程中的一个重要概念,它的主要作用是解决并发环境下的可见性和有序性问题。在Java内存模型(JMM)中,每个线程都有自己的工作内存,其中包含了线程对共享变量的副本。线程间的...

    何为C语言关键字volatile

     在学习C关键词的时候,我们看到了一个新面孔——volatile。在程序员面试宝典中提到“关键字volatile的面试例题是考查嵌入式编程”,中间有一段解析:  回答不出这个问题的人是不会被雇佣的。我认为这是区分C...

    volatile 实例讲解

    volatile是C语言中的一个关键关键字,它用于声明变量的值可能会在编译器无法察觉的情况下发生变化。这个关键字经常被用于多线程编程、中断服务程序、或者任何涉及到硬件交互的场合,确保每次访问该变量时都会从内存...

    C语言中关于关键字volatile的用法

    在C语言中,关键字volatile是一个非常重要的修饰符,它在程序设计中起着不可替代的作用。volatile的主要目的是告诉编译器,它所修饰的变量是易变的,可能会在程序的控制之外被改变。因此,编译器在优化代码时,不能...

    C中的volatile使用方法

    3. **关于volatile的一些问题** - **const与volatile的组合**:一个变量可以同时是`const`和`volatile`。例如,一个只读的状态寄存器,其值不能被程序修改,但可能会被硬件自动修改,所以需要`volatile`保证读取...

    分享--volatile知识

    关于volatile的更深入探讨: - **const和volatile的组合**:一个变量可以同时是const和volatile。例如,一个只读的硬件寄存器,它的值不能被程序修改(const),但可能会由硬件更改(volatile)。 - **volatile...

    volatile讲解

    关于Volatile在Java内存模型中的官方定义,根据Java语言规范第三版,volatile的变量在并发环境下具有特定的语义。当一个字段被声明为volatile时,Java线程内存模型确保所有线程看到这个变量的值是一致的。简单来说,...

    volatile相关理论知识

    volatile是Java中用于处理多线程并发问题的关键字,它主要提供了两个核心功能:可见性和有序性。在Java内存模型(JMM,Java Memory Model)中,volatile确保了共享变量在被修改后,能够立即对其他线程可见,从而避免...

    简单了解java volatile

    Java Volatile 机制详解 Java 中的 volatile 关键字是一种轻量级的同步机制,在并发编程中扮演着重要的角色。了解 Java volatile 需要从内存模型基本概念开始。 内存模型基本概念 在计算机执行程序时,每条指令都...

    Java的Volatile实例用法及讲解

    Java的Volatile实例用法及讲解 Java的Volatile关键字是Java语言中一种特殊的修饰符,在多线程编程中发挥着重要作用。Volatile关键字主要在可见性中发挥作用,保证了变量的可见性,使得变量的变化可以被其他线程立即...

    Java中Volatile的作用实例解析

    Java 中 Volatile 的作用实例解析 Volatile 变量在 Java 语言中扮演着重要的角色,它可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少...

    详解java如何正确使用volatile

    Java中的`volatile`关键字在多线程编程中扮演着至关重要的角色,它的主要功能是确保在并发环境中,被volatile修饰的变量对所有线程都具有实时可见性,并且禁止指令重排序。理解`volatile`的工作原理有助于我们更好地...

    Volatile资料

    由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化——Volatile,让你轻松掌握这个关键字的用法。

Global site tag (gtag.js) - Google Analytics