`
- 浏览:
21145 次
- 性别:
- 来自:
深圳
-
volatile 和 serialVersionUID
volatile(不稳定的)
volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。
这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。
而volatile关键字就是提示VM:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。
使用建议:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。
由于使用volatile屏蔽掉了VM中必要的代码优化,所以在效率上比较低,因此一定在必要时才使用此关键字。
serialVersionUID
在序列化对象的时候,JVM会默认生成一个 serialVersionUID, 如果一个类后来的版本发生了变化,比如说,添加了一个字段,那么反序列旧版本的对象比较 serialVersionUID 时会发生错误。如果编程时强制指定了serialVersionUID, 那么序列化时会使用这个UID,反序列化时也用它,这样就不会出错了。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
详细说明 并举例说明了VOlatile的作用及用法,特别是嵌入式程序员要注意的
const和volatile分析 这个分析得很好 面试 找工作 必备的
C语言中关键字volatile的作用,使用说明和例子
java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java ...
主要研究四种变量(属性)的存取速度. volatile nonatomic atomic和正常变量
对volatile的原子性做探究,加上自己的实验代码和实验结果! Case多核?单核?是否有volatile是否编译器优化-O2结果!
C++中修饰数据可变的关键字有三个:const、volatile和mutable。const比较好理解,表示其修饰的内容不可改变(至少编译期不可改变),而volatile和mutable恰好相反,指示数据总是可变的。mutable和volatile均可以和...
一般对于volatile的解释是这样的:将变量定义为volatile可以防止编译器对变量进行优化,每次均从内存中访问变量,而不是寄存器。既然让编译器优化可以提高访问速度,那为什么又要不用它以及什么时候不用它?其实主要...
讲解了锁的两种特性,互斥和可见;volatile和synchronize的用法和区别
一般说来,volatile用在如下的几个地方: 1、中断服务程序中修改的供其它程序检测的变量需要加volatile; 2、多任务环境下各任务间共享的标志应该加volatile; 3、存储器映射的硬件寄存器通常也要加volatile说明,...
容易忽略的变量声明,但是很重要 volatile的作用: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.
volatile的用法讲解,讲得很详细,希望能帮助到大家
volatile与synchronized的区别,锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility)
const,extern,static,volatile的使用
C程序中volatile关键字的使用.方法及其例程介绍。
主要讲述java线程volatile关键字
volatile的用法,在写代码正确使用volatile,正确理解volatile的用法,增强代码的健壮性
本文给大家介绍了单片机C语言中volatile的作用。
static,const,volatile用法的解析,对三项中全局变量和局部变量的区分,volatile中介绍了其具体用法 和一些区别,bong有例子
讲述了volatile_unsigned_int地址映射的使用说明。