сериализация Java-объекта - потокобезопасен? - PullRequest
6 голосов
/ 23 октября 2010

Я пишу высококонкурентное приложение, которое сильно модифицирует объекты MyClass.Класс состоит из нескольких полей.У меня вопрос, как предотвратить изменение конкретного объекта во время его сериализации другим потоком?

С уважением, Мэтт

Ответы [ 2 ]

7 голосов
/ 23 октября 2010

Путем синхронизации обоих методов, которые сериализуют и изменяют состояние объекта.

4 голосов
/ 25 октября 2010

Зачем модифицировать MyClass?Лучшим подходом (и намного проще работать с ним одновременно) является создание новых неизменных версий вашего объекта состояния и их CAS при обновлении с помощью AtomicReference.Например:

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);}
}

Тогда сериализация не является проблемой, поскольку вы имеете дело с неизменным объектом.Ваша сохраненная ссылка может переходить только из одного действительного состояния в другое, и несколько обновлений могут выполняться атомарно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...