什么是瞬态和挥发性改性剂? -

问题

有人能解释一下transientvolatile修饰符在Java中的含义吗?


#1 热门回答(130 赞)

volatiletransient修饰符适用于类的字段。

transientmodifier告诉Java对象序列化子系统在序列化类的实例时排除字段。然后反序列化对象时,该字段将初始化为默认值; ienull为引用类型,0或8161638507为原始类型。请注意,JLS(参见8.3.1.3)并未说明什么是transient,但是请参考Java Object Serialization Specification。其他非标准序列化机制也可能会关注字段的transient-ness。

volatilemodifier告诉JVM写入字段应始终同步刷新到内存,并且该字段的读取应始终从内存中读取。这意味着可以在多线程应用程序中安全地访问和更新标记为volatile的字段,而无需使用本机或基于库的同步。同样,对volatile字段的读写也是原子的。 (这并不适用于>>非易失性<< longordoublefields,这可能会受到在某些JVM上"字撕裂"。)的JLS are8.3.1.4,17.4and17.7的相关部分。


#2 热门回答(8 赞)

易失性意味着其他线程可以编辑该特定变量。因此编译器允许访问它们。
http://www.javamex.com/tutorials/synchronization_volatile.shtml
瞬态意味着在序列化对象时,它将在反序列化时返回其默认值
http://www.geekinterview.com/question_details/2


#3 热门回答(4 赞)

易变和瞬态关键词

1)transient关键字与实例变量一起使用,以将它们从序列化过程中排除。如果字段是暂时的,则其值将不会保留。

另一方面,volatile关键字用于将Java变量标记为"存储在主存储器中"。

每次读取volatile变量都将从计算机的主内存中读取,而不是从CPU缓存中读取,并且每次写入volatile变量都将写入主内存,而不仅仅是CPU缓存。

2)transient关键字不能与static关键字一起使用,但volatile可以与static一起使用。

3)在反序列化期间使用默认值初始化瞬态变量,并且必须由应用程序代码处理值的赋值或恢复。

有关更多信息,请参阅我的博客:
http://javaexplorer03.blogspot.in/2015/07/difference-between-volatile-and.html