Вы думаете о синхронизации на слишком низком уровне. Это не имеет никакого отношения к тому, какие классы вы используете. Речь идет о защите данных и объектов, которые совместно используются потоками.
Если один поток может изменить какой-либо один объект данных или группу связанных объектов данных, в то время как другие потоки могут одновременно просматривать или изменять один и тот же объект (ы), то вам, вероятно, потребуется синхронизация. Причина в том, что часто один поток не может значимым образом изменить данные без временного перевода данных в недопустимое состояние.
Цель синхронизации состоит в том, чтобы не допустить, чтобы другие потоки увидели недопустимое состояние и, возможно, сделали плохие вещи с теми же данными или с другими данными в результате.
Java Collections.synchronizedList(...)
дает возможность двум или более потокам совместно использовать List
таким образом, чтобы сам список был защищен от повреждения действием различных потоков. Но он не предлагает никакой защиты для объектов данных, которые в List
. Если ваше приложение нуждается в такой защите, то вы должны предоставить ее.
Если вам нужна эквивалентная защита для очереди, вы можете использовать любой из нескольких классов, реализующих java.util.concurrent.BlockingQueue
. Но будьте осторожны! То же самое относится Сама очередь будет защищена от повреждения, но защита не распространяется автоматически на объекты, которые ваши потоки проходят через очередь.