`
xiaohaiyutian
  • 浏览: 5820 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Volatile 的实际使用

 
阅读更多

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

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

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

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

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

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


就跟C中的一样 禁止编译器进行优化~~~~
分享到:
评论

相关推荐

    volatile的使用方法

    在实际应用中,volatile 关键字经常用在以下几个场景中: 1. 多线程编程中,用于指定共享变量的存储类别。 2. 在使用像寄存器一样的变量时,用于指定变量的存储类别。 3. 在使用中断服务程序时,用于指定中断服务...

    stm32 volatile变量的正确使用

    本文将深入探讨`volatile`关键字的基本概念、使用场景以及注意事项,并结合实际示例来帮助读者更好地理解和应用这一概念。 #### `volatile`关键字详解 在C语言中,`volatile`是一个类型限定符,用于告知编译器不要...

    volatile使用详解

    为了确保每次读写操作都能反映硬件的实际状态,应该使用 `volatile` 关键字。 #### 四、示例代码分析 以下是一个示例代码片段,演示了 `volatile` 关键字的应用: ```cpp #include void main() { volatile int...

    volatile的用法讲解

    3. 使用volatile修饰符可能会影响编译器的优化,因此需要根据实际情况进行选择。 volatile修饰符是一种特殊的变量修饰符,它用于确保编译器每次都读取最新的值。它常用于并行设备的硬件寄存器、中断服务子程序和多...

    Java线程:volatile关键字

    在实际应用中,这些条件表明,可以被写入 volatile 变量的这些有效值独立于任何程序的状态,包括变量的当前状态。 volatile 变量的使用场景包括: * 多个变量之间或者某个变量的当前值与修改后值之间没有约束的...

    volatile的用法

    10. volatile在实际编程中的注意事项:尽管volatile可以保证变量在多线程或中断环境下的正确访问,但过多地使用volatile也可能会导致程序效率下降。因此,在使用volatile时应谨慎,并且评估其对程序性能的可能影响。...

    const和volatile分析

    在此,我们将深入探讨`const`和`volatile`的含义、用法及其在实际编程中的应用。 `const`关键字: 1. `const`的基本概念:`const`用来声明常量,即一旦赋值后就不能改变的变量。它帮助编译器检查代码中是否有尝试...

    volatile源码分析1

    在深入理解volatile时,我们需要考虑JVM内存模型、处理器缓存以及底层的汇编指令,这有助于我们更好地理解和使用volatile,解决并发编程中的问题。在实际开发中,合理利用volatile可以避免不必要的锁同步,提升程序...

    volatile_unsigned_int

    标题“volatile_unsigned_int”以及描述“讲述了volatile_unsigned_int地址映射的使用说明”指向了C语言中特殊的关键词“volatile”以及其与“unsigned int”类型的结合使用。该知识点主要涉及硬件编程,特别是在...

    mcu-volatile-example.rar_volatile_单片机C语言

    而 "[单片机]volatile 实例讲解(原创)" 文件很可能包含了作者原创的 `volatile` 使用案例,这些案例可能包括了详细的代码和解析,帮助用户深入理解 `volatile` 的实际应用。 总的来说,这个压缩包提供了一个学习和...

    从汇编角度理解volatile

    即使不使用volatile,由于每次访问全局变量`g_i`时都通过互斥锁来控制,编译器在访问全局变量时都会从内存中读取,因此加不加volatile并不会改变最终的结果。 但是,如果线程间共享变量没有加锁,情况就会有所不同...

    const extern static volatile 小结

    - 单纯使用 `volatile` 关键字并不能解决所有并发问题,通常需要与其他同步机制(如互斥锁)结合使用。 - 使用 `volatile` 需要谨慎,因为它可能导致编译器放弃某些优化。 #### 综合运用 了解 `const`、`extern`...

    static,const,volatile用法

    - 如果一个变量可能被多个线程同时访问并修改,则应该将其声明为 `volatile` 类型,以确保编译器不会对该变量进行优化而忽略其实际变化。 - **硬件接口**: - 当一个变量代表了硬件寄存器的状态时,如果硬件可能会...

    volatile,nonatomic和atomic关键字测试

    在iOS和Mac开发中,Objective-C是主要的编程语言,它在定义实例变量或属性时提供了几个关键的修饰符,包括`volatile`、`nonatomic`和`atomic`。这些关键字对于理解多线程环境下的数据同步和内存管理至关重要。本文将...

    volatile的作用

    这说明了如果没有使用`volatile`关键字,编译器可能会缓存`i`的值,即使其实际值已经发生了变化。 #### (2) 使用`volatile` ```c++ volatile int i = 10; int a = i; __asm { mov dword ptr [ebp-4], 20h } int...

    聊聊并发(一)深入分析Volatile的实现原理

    在并发编程领域,Volatile是Java中一个非常关键的特性,它为共享变量提供了内存可见性和有序性保证,但不保证原子性。...在实际编程中,合理利用Volatile,结合并发工具,可以构建出更加高效和可靠的并发系统。

    (*(volatile_unsigned_int_ *))

    其中最重要的是`volatile`关键字的使用,它告诉编译器不要对该变量做优化,因为该变量的值可能由外部因素改变。 #### 2. `volatile`关键字的作用 `volatile`关键字在C语言中用来标记那些可能被意外修改的变量。这里...

    Java 关键字 volatile 的理解与正确使用

    Java 关键字 volatile 的理解与正确使用 Java 语言中关键字 volatile 被称作轻量级的 synchronized,与 synchronized 相比,volatile 编码相对简单且运行时的开销较少,但能够正确合理地应用好 volatile 并不是那么...

    关键字volatile的用途

    ### 关键字volatile的用途 #### 一、volatile的基本概念 在嵌入式系统开发过程中,程序员经常会遇到一些变量的值可能会被意外...然而,在实际使用中也需要注意其潜在的性能开销以及与其他并发控制机制的结合使用。

Global site tag (gtag.js) - Google Analytics