转载请注明出处: volatile用处说明 在JDK1.2之前,Java的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的使用变得非常重要。 在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器 ...
分类:
编程语言 时间:
2017-05-29 18:21:30
阅读次数:
255
由于java的CAS同时具有 volatile 读和volatile写的内存语义,因此Java线程之间的通信现在有了下面四种方式: A线程写volatile变量,随后B线程读这个volatile变量。 A线程写volatile变量,随后B线程用CAS更新这个volatile变量。 A线程用CAS更新 ...
分类:
编程语言 时间:
2017-05-17 10:19:52
阅读次数:
192
一、概述 java中的volatile变量常常被看作是“程度较轻的synchronized”,它与“synchronized代码块”相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。 锁的主要特性:互斥性和可见性。互斥一 ...
分类:
其他好文 时间:
2017-05-17 10:10:52
阅读次数:
283
1. 锁的劣势:(包括syncronized实现的内置锁、ReentrantLock) (1)开销大:线程的挂起与恢复存在很大开销,并且存在着较长时间的中断。 2. volatile变量: (1)优势:更轻量级的同步机制,在使用这些变量时不会发生上下文切换或线程调度,提供了内存可见性保证 (2)劣势 ...
分类:
其他好文 时间:
2017-05-06 15:08:19
阅读次数:
271
volatilekeyword 当变量被某个线程A改动值之后。其他线程比方B若读取此变量的话,立马能够看到原来线程A改动后的值 注:普通变量与volatile变量的差别是volatile的特殊规则保证了新值能马上同步到主内存,以及每次使用前能够马上从内存刷新,即一个线程改动了某个变量的值,其他线程读 ...
分类:
其他好文 时间:
2017-04-26 10:15:11
阅读次数:
293
volatile提供了弱同步机制,用来确保将变量更新通知到其他线程。volatile变量不会被缓存在寄存器中或者对其他处理器不可见的地方,因此在读取volatile变量时总会返回最新写入的值。能够想象成例如以下语义,然而volatile是更轻量级的同步机制。volatile仅仅能确保可见性,但不能保 ...
分类:
编程语言 时间:
2017-04-16 12:03:31
阅读次数:
160
Happens-Before规则 程序顺序规则。如果程序中操作A在操作B之前,那么在线程中A操作将在B操作之前执行。 监视器锁规则。在监视器锁上的解锁操作必须在同一个监视器锁上的加锁操作之前执行。 volatile变量规则。对volatile变量的写入操作必须在对该变量的读操作之前执行。 线程启动规 ...
分类:
移动开发 时间:
2017-03-30 10:25:33
阅读次数:
141
happens-before:描述内存可见性as-if-serial:无论怎么重排序,程序的运行结果不会改变 ReentrantLock依赖了队列同步器AQS,其实现方式是volatile变量的读写操作进行线程间通信,通过CAS修改state值,成功,其state值>0,则取锁成功 Concurre ...
分类:
Web程序 时间:
2017-03-29 16:26:45
阅读次数:
249
对于volatile的理解,我想通过代码来表达。 public class VolatileExample { private volatile long data; public void setData(long newData){ data = newData;//对于volatile变量的写 ...
分类:
其他好文 时间:
2017-03-13 13:27:07
阅读次数:
157
<!--done--> C中的volatile用法(转载) volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变 ...
分类:
其他好文 时间:
2017-03-12 13:23:33
阅读次数:
169