gpt4 book ai didi

java - 在序列化之前锁定 Java 对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:19:59 26 4
gpt4 key购买 nike

如果我有一个带有两个实例变量的简单 Java 对象:

class SerializeMe implements Serializable{

private Foo foo;
private Bar bar;

}

如果 FooBar 类实现了 Serializable 接口(interface),我就可以开始了。但是我的问题是,如果我正在序列化这个类SerializeMe,那么在多线程环境中,foobar 变量可能会在序列化过程中发生变化?

如何保证父类SerializeMe的整体状态在序列化过程中不会改变?

在您希望序列化的对象上简单地创建一个锁是最好的方法吗?

最佳答案

序列化不是线程安全的。

你可以

synchronize(object){
serialize(object)
}

但是如果任何其他线程已经引用了 Foo 或 bar,他们可以修改它。

如果你需要修改一个类的序列化你需要实现void writeObject(ObjectOutputStream)。

private synchronized void writeObject(ObjectOutputStream out) throws IOException {
synchronized(foo){
synchronized(bar){
out.defaultWriteObject();
}
}
}

这不是我的想法,所以请测试一下。

[编辑]正如 Peter Lawrey 所指出的那样,它是同步的

关于java - 在序列化之前锁定 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30062751/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com