Java并发编程:volatile关键字解析
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。
volatile关键...
分类:
编程语言 时间:
2015-01-01 16:00:40
阅读次数:
175
方法表的结构与字段表一样,依次包含了访问标志(access_flags),名称索引(name_index),描述符索引(descriptor_index),属性表集合(attributes)几项,如下表所示:
因为volatile关键字和transient关键字不能修改方法,所以方法表的访问标志中没有了ACC_VOLATILE与ACC_TRANSIENT标志。与之相对的,synchroniz...
分类:
编程语言 时间:
2014-12-13 12:17:54
阅读次数:
177
volatile作为指令关键字最主要的作用就是,确保被修饰的指令不会因为编译器的优化而省略,并且要求每次直接读值。简洁的来说,就是为了防止编译器对代码进行优化而设计的关键字。对于volatile关键字 ,你有什么想说的吗?...
分类:
其他好文 时间:
2014-11-23 17:39:23
阅读次数:
119
volatile变量具有synchronized的可见性特性,但是不具备原子特性,即多线程环境中,使用 volatile 关键字的变量仅可以保证不同线程读取变量时,可以读到最新修改的变量值,但是修改变量值时,却不能保证线程安全(可能存在写值覆盖现象)。以下测试代码,展示了使用volatile关键.....
分类:
编程语言 时间:
2014-11-20 11:37:55
阅读次数:
216
volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。 例如: volatil...
分类:
其他好文 时间:
2014-11-13 22:29:12
阅读次数:
176
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在D...
分类:
编程语言 时间:
2014-11-03 12:56:14
阅读次数:
136
转自:http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。Java语言是支持多线程的...
分类:
编程语言 时间:
2014-10-30 01:42:30
阅读次数:
307
一、为什么要有volatile关键字
估计很多java初学者都被volatile这个关键字迷惑过。虽然网上有很多讨论volatile的文章,但它们有的过于讲述底层原理,而没有说明其应用场景,让初学者看后还是一头雾水;有的过于使用类比讲解,造成了一定的错误,这样的文章更害人。下面,小弟试着分析下volatile关键字的作用及用法,希望能给大家带来一定的启发。文中错误之处,请各位大神指正。
我们知...
分类:
编程语言 时间:
2014-10-26 18:26:51
阅读次数:
227
volatile关键字相信了解Java多线程的读者都很清楚它的作用。volatile关键字用于声明简单类型变量,如int、float、boolean等数据类型。如果这些简单数据类型声明为volatile,对它们的操作就会变成原子级别的。但这有一定的限制。例如,下面的例子中的n就不是原子级别的:pub...
分类:
其他好文 时间:
2014-10-14 19:50:29
阅读次数:
123
星期三,2013年11月6日volatile关键字 : 1. 与synchronized几乎相同,但是volatile在多读少写的情况下,性能更优2. 用来定义成员变量时,可以保证多线程每次读取成员变量都是从共享内存中读取,保证值相等ConcurrentLinkedQueue:1. 无锁的并发线程安...
分类:
编程语言 时间:
2014-10-10 23:49:14
阅读次数:
332