java对象序列化 - 线程安全吗?

时间:2010-10-23 11:27:16

标签: java multithreading concurrency

我正在编写高度并发的应用程序,它广泛地修改了MyClass的对象。该课程由几个领域组成。我的问题是如何防止特定对象在其他线程序列化期间的修改?

此致 马特

2 个答案:

答案 0 :(得分:7)

通过synchronizing序列化和修改对象状态的方法。

答案 1 :(得分:4)

为什么要修改MyClass?更好的方法(并且更容易同时处理)是在更新时创建状态对象的新不可变版本,并使用AtomicReference创建CAS。例如:

final class MyClass {
  final int age;
  final String name;
  final String address;

  MyClass(int age, String name, String address) {…}

  MyClass setNameAndAddress(String name, String address) {return new MyClass(age, name, address);}
}

然后序列化不是问题,因为您正在处理不可变对象。您存储的引用只能从一个有效状态更改为另一个有效状态,并且可以原子方式执行多个更新。