瞬态和静态变量无法序列化
根据Joshua Bloch的优秀书籍“Effective Java Programming Language Guide”,“volatile修饰符保证读取字段的任何线程都能看到最近写入的值”
但是如果要将volatile序列化或不序列化。
答案 0 :(得分:5)
volatile
通常由Java Object Serialization序列化。 volatile
的线程/ JMM属性与序列化正交。
顺便提一下,如果您编写自定义transient
/ static
方法来执行此操作,则序列化writeObject
或readObject
变量可能 。但是,这不是由默认的序列化程序完成的。
您不希望序列化transient
变量。毕竟transient
本质上是一个提示,不包括序列化中的字段。
static
变量未包含在对象序列化中(默认情况下)的原因是静态不属于特定对象。
答案 1 :(得分:3)
是的,可以序列化。字段修饰符volatile
用于Java内存模型,以确保所有线程都看到一致的值。它不会限制其持久性。