我正在编写高度并发的应用程序,它广泛地修改了MyClass的对象。该课程由几个领域组成。我的问题是如何防止特定对象在其他线程序列化期间的修改?
此致 马特
答案 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);}
}
然后序列化不是问题,因为您正在处理不可变对象。您存储的引用只能从一个有效状态更改为另一个有效状态,并且可以原子方式执行多个更新。