Pourquoi modifier MyClass? Une meilleure approche (et beaucoup plus facile à gérer simultanément) est de créer de nouvelles versions immuables de votre objet d'état et de les CAS avec un AtomicReference lors de la mise à jour. Par exemple:
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);}
}
Ensuite, la sérialisation n'est pas un problème car vous avez affaire à un objet immuable. Votre référence stockée peut uniquement passer d'un état valide à un autre et plusieurs mises à jour peuvent être effectuées de manière atomique.
y compris les modifications de l'état de tous les sous-objets (contenus dans les champs de l'objet). – Thilo
Alors que la synchronisation résout votre problème de sécurité des threads, elle le fait en sérialisant tous les accès, donc votre application est fondamentalement mono-thread et pas du tout concurrente. –