本文主要是介绍【网摘】Java关键字transient和volatile,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
【网摘】Java关键字transient和volatile
原文地址:http://java.chinaitlab.com/base/804326.html
transient:
java有个特点就是序列化,简单地来说就是可以将这个类存储在物理空间(当然还是以文件的形式存在),那么当你从本地还原这个文件时,你可以将它转换为它本身。这可以极大地方便网络上的一些操作,但同时,因为涉及到安全问题,所以并不希望把类里面所有的东西都能存储(因为那样,别人可以通过序列化知道类里面的内容),那么我们就可以用上transient这个关键字,它的意思是临时的,即不会随类一起序列化到本地,所以当还原后,这个关键字定义的变量也就不再存在。
volatile:
Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。
这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。
而volatile关键字就是提示VM:对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。
使用建议:在两个或者更多的线程访问的成员变量上使用volatile。当要访问的变量已在synchronized代码块中,或者为常量时,不必使用。
由于使用volatile屏蔽掉了VM中必要的代码优化,所以在效率上比较低,因此一定在必要时才使用此关键字。
java.lang.reflect.Modifier
ABSTRACT
修饰符 abstract
FINAL
修饰符 final
NATIVE
修饰符 native
PRIVATE
修饰符 private
PROTECTED
修饰符 protected
PUBLIC
修饰符 public
STATIC
修饰符 static
STRICTFP
修饰符 strictfp
SYNCHRONIZED
修饰符 synchronized
TRANSIENT
修饰符 transient
VOLATILE
修饰符 volatile
这篇关于【网摘】Java关键字transient和volatile的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!