volatile变量具有synchronized的可见性特性,但是不具备原子特性,即多线程环境中,使用 volatile 关键字的变量仅可以保证不同线程读取变量时,可以读到最新修改的变量值,但是修改变量值时,却不能保证线程安全(可能存在写值覆盖现象)。以下测试代码,展示了使用volatile关键.....
分类:
编程语言 时间:
2014-11-20 11:37:55
阅读次数:
216
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:1). 并行设备的硬件寄存器(如:状态寄存器)2)...
分类:
其他好文 时间:
2014-11-19 23:58:26
阅读次数:
279
一。volatile定义:一个定义为volatile的变量是说这变量可能会被意想不到的被改变,这样,有了volatile变量后,就提醒编译器就不会去假设这个变量的值了。精确地说就是,编译中的优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。eg:1.硬件设备...
分类:
其他好文 时间:
2014-11-19 10:31:07
阅读次数:
199
volatile表示编译器不要优化代码 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:1) 并行...
分类:
其他好文 时间:
2014-11-18 06:57:41
阅读次数:
126
volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。 例如: volatil...
分类:
其他好文 时间:
2014-11-13 22:29:12
阅读次数:
176
Java? 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。这两种机制的提出都是为了实现代码线程的安全性。其中
Volatile 变量的同步性较差(但有时它更简单并且开销更低),而且其使用也更容易出错。
Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile
...
分类:
其他好文 时间:
2014-10-22 18:17:03
阅读次数:
197
volatile 变量使用指南
Java? 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。这两种机制的提出都是为了实现代码线程的安全性。其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低),而且其使用也更容易出错。在这期的 Java 理论与实践 中,Br...
分类:
编程语言 时间:
2014-10-13 19:02:51
阅读次数:
275
一。总发布对象:使对象能在当前作用域之外的代码中使用。既将对象的引用传递到其他类的变量和方法。(1)变量的静态初始化(2)声明为volatile变量 或 AtomicReferance对象(3)声明为final变量(4)将变量保存在线程安全的容器中(既保存在一个由锁保护的域中)二。分1.成员变量的初...
分类:
编程语言 时间:
2014-09-20 19:45:19
阅读次数:
287
加锁机制既可以确保可见性又可以确保原子性,而volatile变量只能确保可见性。public class NoVisibility { private static boolean ready; private static int number; private stat...
分类:
其他好文 时间:
2014-09-20 18:36:39
阅读次数:
213
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值(From Memory),而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:1) 并行设备的硬件寄存...
分类:
编程语言 时间:
2014-08-26 11:15:55
阅读次数:
287