Po co modyfikować MyClass? Lepszym podejściem (i znacznie łatwiejszym w obsłudze) jest utworzenie nowych, niezmiennych wersji twojego obiektu stanu oraz CAS z AtomicReference podczas aktualizacji. Np .:
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);}
}
Następnie serializacja nie stanowi problemu, ponieważ mamy do czynienia z niezmiennym obiektem. Zapisane odniesienie może zmienić się tylko z jednego prawidłowego stanu na inny, a wiele aktualizacji może być przeprowadzanych atomowo.
w tym modyfikacje stanu wszelkich pod-obiektów (zawartych w polach obiektu). – Thilo
Podczas gdy synchronizacja rozwiązuje problem związany z bezpieczeństwem wątków, robi to serializując cały dostęp, dlatego aplikacja jest w zasadzie jednoprzekrojowa, a nie współbieżna. –