2015-07-28 2 views
1

У меня есть приложение с спящим режимом. Существует два основных потока: первый - сбор/изменение данных, а второй - сохранение данных в базу данных, в некоторых случаях программа может попытаться изменить и сохранить объект одновременно.Синхронизация и спящий режим

Должен ли я сделать все объекты потокобезопасными (использовать только синхронизированные коллекции, атомные объекты, а не примитивы ...) или спящий режим, заботится об этом автоматически?

+1

Для сеанса требуется сеанс Hibernate. Вы не должны делиться сеансом между потоками, и поэтому объекты не должны синхронизироваться. –

+0

И если мне нужно сохранить данные во время сеанса, мне нужно синхронизировать мои объекты? – hnnn

+2

Моя рекомендация вам в том, что потребуется некоторое время, чтобы прочитать книгу [Сохранение спящего режима] (http://www.manning.com/bauer2/). Но короткий ответ, если у вас есть один сеанс на сеанс, чем синхронизация, не поможет вам, потому что сущности из одного сеанса отличаются от сущностей другого, даже если они относятся к одной и той же записи базы данных. В этих случаях вам нужно решить проблему по-другому, используя оптимистичную или пессимистическую блокировку. Но, как вы можете догадаться, это трудно объяснить здесь. Пойдите, прочитайте эту книгу, которая поможет вам больше, чем задавать какой-либо вопрос здесь. –

ответ

1

Hibernate создает экземпляры объектов за сеанс, поэтому классическая синхронизация не нужна (и не будет полезна).

Наиболее распространенным способом обеспечения одновременного доступа к данным и модификаций является использование locks.

Смежные вопросы