什么是瞬态和挥发性修饰符?
有人可以解释什么是transient
和volatile
修饰符在Java中的含义?
volatile
和transient
修饰符适用于类的字段。
transient
修饰符告诉Java对象序列化子系统在序列化类的实例时排除该字段。 当对象被反序列化时,该字段将被初始化为默认值; 即对于引用types为null
,对于基本types为零或为false
。 注意,JLS(见8.3.1.3 )没有说明什么是transient
,而是依照Java对象序列化规范 。 其他非标准序列化机制也可能关注田地的transient
。
volatile
修饰符告诉JVM写入该字段应始终同步刷新到内存,并且该字段的读取应始终从内存中读取。 这意味着标记为volatile的字段可以在multithreading应用程序中安全地访问和更新,而无需使用本地或标准的基于库的同步。 同样,读取和写入易失性字段是primefaces的。 (这不适用于>> non-volatile << long
或double
字段,这些字段在某些JVM上可能会被“撕掉”).JLS的相关部分是8.3.1.4,17.4和17.7 。
易失性意味着其他线程可以编辑该特定variables。 所以编译器允许访问它们。
http://www.javamex.com/tutorials/synchronization_volatile.shtml
暂态意味着当你序列化一个对象时,它将在解序列化的时候返回它的默认值
易失性和暂时的关键字
1)transient关键字与实例variables一起使用,从序列化过程中排除它们。 如果一个字段是瞬态的,它的值将不会被持续。
另一方面,volatile关键字用于将Javavariables标记为“正在存储在主内存中”。
每一次读取一个易失variables都将从计算机的主内存中读取,而不是从CPUcaching中读取,每一次写入一个易失variables都将被写入主内存,而不仅仅是CPUcaching。
2)transient关键字不能和static关键字一起使用,volatile可以和static一起使用。
3)在反序列化过程中,暂态variables初始化为默认值,必须由应用程序代码处理赋值或恢复值。
欲了解更多信息,请参阅我的博客:
http://javaexplorer03.blogspot.in/2015/07/difference-between-volatile-and.html