потокобезопасность в объектах значений - PullRequest
0 голосов
/ 21 ноября 2011

Я немного запутался с требованиями по синхронизации доступа к частным переменным экземпляра в Java.У меня есть приложение, которое выполняет многопоточные задачи по расписанию.Эти задачи (экземпляры класса) имеют переменную экземпляра, которая содержит объект значения.Кроме того, у этих задач есть методы run, которые выполняют задачу, вызывая некоторые другие классы, которые содержат логику выполнения (в свою очередь они используют больше объектов-значений как часть обработки).

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

1 Ответ

4 голосов
/ 21 ноября 2011

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

Похоже, что ваши объекты задач не многопоточные в этомразные потоки не получат доступ к одной и той же задаче.Если это так, вам не нужно делать ваши объекты задач поточно-безопасными.

Являются ли объекты значений изменяемыми и используются ли они таким образом, чтобы один и тот же объект значения мог быть доступен для нескольких потоков нав то же время?Если любой из них - «да», вам нужно сделать их безопасными для потоков.

Самый простой способ сделать объектный поток безопасным - сделать его неизменным.Если его внутреннее состояние не может измениться после того, как объект сконструирован, то он по своей природе безопасен для потоков.Если вы не можете сделать ваши объекты неизменяемыми, вам нужно синхронизировать доступ к любым переменным экземпляра, состояние которых можно изменить.

...