java.util.Vector 序列化线程安全吗?

Posted

技术标签:

【中文标题】java.util.Vector 序列化线程安全吗?【英文标题】:Is java.util.Vector serialization thread-safe? 【发布时间】:2010-10-11 23:15:24 【问题描述】:

我知道 Vector 类对于添加和删除元素是线程安全的 [reference]。

如果我使用 ObjectOutputStream 对 Vector 进行序列化,即使其他线程在序列化期间添加和删除对象,我是否能保证在反序列化时保持一致(且非损坏)状态?

【问题讨论】:

请注意,虽然单独的添加/删除操作是同步的,但是当其他线程正在添加/删除(不添加自己的锁定)时,您不能遍历向量(请参阅***.com/questions/1386275/… 【参考方案1】:

writeObject() 方法是同步的。但是 Javadoc 中没有任何内容可以保证,除非“向量已同步”语句暗示了这一点。

请注意,readObject() 方法不需要同步,因为在 readObject() 返回之前,任何人都无法访问该对象。

【讨论】:

只要目前以线程安全的方式实现,我可以接受 Javadoc 中的声明有些模糊。

以上是关于java.util.Vector 序列化线程安全吗?的主要内容,如果未能解决你的问题,请参考以下文章

java.util.vector中的vector的详细用法

JSF 2.x @ViewScoped 托管 bean 线程安全吗?

深度分析Java的枚举类型—-枚举的线程安全性及序列化问题

java.util.Vector

Java 集合类学习之Vector

单例的线程安全及序列化问题