volatile变量 volatile类型变量有什么特点?
volatile类型变量有什么特点?
volatile变量具有synchronized的可见性属性,但不具有原子属性。这意味着线程可以自动发现volatile变量的最新值。Volatile变量可用于提供线程安全,但它们只能应用于非常有限的一组用例:多个变量之间或变量的当前值和修改值之间没有约束。因此,仅使用volatile不足以实现计数器、互斥锁或任何具有与多个变量相关联的不变量的类(例如“start<=end”)。为了简单性或可伸缩性,您可能更喜欢可变变量而不是锁。当使用可变变量而不是锁时,有些习惯用法更易于编码和阅读。此外,volatile变量不会像锁一样导致线程阻塞,因此它们很少会导致可伸缩性问题。在某些情况下,如果读操作比写操作大得多,那么volatile变量也可以提供比锁更高的性能优势。如果正确使用volatile变量,则只能在有限的情况下使用volatile变量替换锁。为了给易失性变量提供理想的线程安全,必须同时满足以下两个条件:●变量的写操作不依赖于当前值。变量不包括在与其他变量的不变量中。事实上,这些条件表明,可以写入volatile变量的有效值独立于任何程序的状态,包括变量的当前状态。第一个条件的限制阻止volatile变量用作线程安全计数器。虽然增量操作(x)看起来像一个单独的操作,但它实际上是一个由读-修改-写操作序列组成的组合操作,必须以原子模式执行,而volatile不能提供必需的原子特性。为了实现正确的操作,我们需要在操作过程中保持X的值不变,而volatile变量不能。(但是,如果将该值调整为仅从单个线程写入,则可以忽略第一个条件。)大多数编程情况都会与这两个条件中的一个发生冲突,因此volatile变量不像synchronized那样普遍适用于线程安全。清单1显示了一个非线程安全的数值范围类。它包含一个不变量-下界总是小于或等于上界。
定义为volatile的变量有什么作用?
Volatile是一个类型限定符。声明为volatile的变量表示它具有与优化相关的特殊属性。Volatile用于强制实现屏蔽可能的优化。例如,对于具有内存映射I/O的机器,可以将指向设备寄存器的指针声明为指向volatile的指针,以防止编译器通过
volatile变量 原子变量和volatile 多线程volatile
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。