java中volatile关键字的使用涉及到java的内存模型,JMM。简单来说,每个线程都有一个本地内存(虚拟的),线程共享的变量存储在主内存中,主内存在堆中。内存访问方式如下图所示。volatile的作用总结如下:(1)可见性:对一个volatile变量的读取,总是能够看到(任意线程)对这个变量...
分类:
编程语言 时间:
2015-03-14 18:28:47
阅读次数:
311
volatile变量具有两种特性:保证此变量对所有线程的可见性,注意:java里的运算不是原子操作,导致volatile变量在并发下存在不一致的问题。使用规则要求a.运算结果并不依赖变量的当前值,或者能够确保只有单一的线程修改变量的值。b.变量不需要与其他的状态变量共同参与不变约..
分类:
编程语言 时间:
2015-03-01 01:42:19
阅读次数:
163
Java 理论与实践: 正确使用 Volatile 变量Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchron...
分类:
编程语言 时间:
2015-02-27 16:49:02
阅读次数:
265
1.const的作用是什么?第一,限定一个只读变量(不是常量)。如constdoublePI=3.14第二,限定函数参数,如,voidfunction(constchar*p)//函数只能读取不能改变p的值2.关键字volatile有什么含意?volatile影响编译器编译的结果,指出,volatile变量是随时可能发生变化的,与volati..
分类:
其他好文 时间:
2015-02-25 23:57:48
阅读次数:
238
同步机制可以保证原子操作和内存可见性,但是同步机制对变量的访问性能是我们不得不考虑的问题,java语言提供了一种弱同步机制,volatile变量。
它的原理大致是这样的,当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将变量上的操作与其他内存操作一起重排序。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的...
分类:
编程语言 时间:
2015-02-01 23:21:33
阅读次数:
316
volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。例如:volatile ...
分类:
其他好文 时间:
2015-01-31 21:47:31
阅读次数:
199
Java中的两种内置同步机制: synchronized 和 volatile 变量, volatile修饰的变量, 在使用时会强制检查最新值. 有synchronized的值可见性, 但是没有其操作原子性. 因为其轻量的原因, 在一些考虑性能的地方, 可以使用volatile, 但是使用时要非常小...
分类:
编程语言 时间:
2015-01-15 01:39:41
阅读次数:
226
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1).并行设备的硬件寄存器(如:状态寄存器) 2...
分类:
系统相关 时间:
2014-12-16 11:16:44
阅读次数:
295
当一个变量定义成volatile之后,它将具备两种特性:第一是保证此变量对所有线程的可见性,这里的“可见性”是指当一条线程修改了这个变量的值,新值对于其它线程是可以立即得知的,变量值在线程间传递均需要通过主内存来完成,如:线程A修改一个普通变量的值,然后向主内存进行回写,另外一条线程B在线程A回写完成了之后再从主内存进行读取操作,新变量的值才会对线程B可见。
关于volatile变量的可见...
分类:
编程语言 时间:
2014-12-15 21:48:58
阅读次数:
249
提到java原子类,不得不说下关键字volatile和内存可见性。内存可见性问题,可以看下《java并发编程实践》讲的很详细。下面的示例代码是错误的,因为没有使用volatile来保证内存的可见性,所以如果1个线程修改了共享变量,那么另外一个线程可能永远也看不到修改后的值。如果将stop修改成volatile类型的,就可以保证一个线程对volatile变量的修改,对另一个线程是可见的。
publ...
分类:
其他好文 时间:
2014-11-30 18:48:15
阅读次数:
285