Синхронизация объекта, совместно используемого потоками, но не доступного одновременно
Позволять'скажем, у меня есть общий объект с полемdata
, Несколько потоков будут делиться ссылкой на этот объект для доступа к полю. Тем не менее, потоки никогда не обращаются к объекту одновременно. Нужно ли декларироватьdata
как изменчивый?
Такая ситуация будет следующей:
КлассCounter
определяет уникальное полеvalue
и один метод.increment
Поток увеличивает счетчик, затем порождает другой поток, который увеличивает счетчик и т. Д.Учитывая саму логику программы, одновременный доступ к счетчику отсутствует. Однако счетчик распределяется между несколькими потоками. Должен ли счетчик быть летучим?
Другой вариант ситуации - когда несколько потоков манипулируют объектом X, который представляет собой обычные данные, но чередуют свое временное выполнение (так, чтобы к X никогда не обращались одновременно) через другой объект Y, который полагается на управление параллелизмом (,,wait
notify
synchronize
). Должны ли поля объекта X быть изменчивыми?