java中Volatile变量

来源:互联网 发布:淘宝账号登陆不了 编辑:程序博客网 时间:2024/06/05 17:13

(1)Volatile 变量具有 synchronized 的可见性特性,但是不具备原子特性。这就是说线程能够自动发现 volatile 变量的最新值

(2)如果读操作远远大于写操作,volatile 变量还可以提供优于锁的性能优势

(3)volatile的作用是: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.
volatile是给编译器的指示来说明对它所修饰的对象不应该执行优化

简单地说就是防止编译器对代码进行优化.比如如下程序:

XBYTE[2]=0x55;XBYTE[2]=0x56;XBYTE[2]=0x57;XBYTE[2]=0x58;

对外部硬件而言,上述四条语句分别表示不同的操作,会产生四种不同的动作,但是编译器却会对上述四条语句进行优化,认为只有XBYTE[2]=0x58(即忽略前三条语句,只产生一条机器代码)。如果键入volatile,则编译器会逐一的进行编译并产生相应的机器代码(产生四条代码)

(4)当第二个操作是volatile写时,不管第一个操作是什么,都不能重排序。这个规则确保volatile写之前的操作不会被编译器重排序到volatile写之后

(5)当第一个操作是volatile读时,不管第二个操作是什么,都不能重排序。这个规则确保volatile读之后的操作不会被编译器重排序到volatile读之前。

(6)当第一个操作是volatile写,第二个操作是volatile读时,不能重排序

原创粉丝点击