Единственный способ, которым я могу думать, что вы можете возможно вызывать методы, такие как GetListObjectCount
без использования synchronized
, - это если сам список является поточно-ориентированным и будет вести себя разумно при вызове этого метода перед лицом одновременных изменений.
В этом случае никаких других проблем не будет, так как ссылка на сам список никогда не изменится. Вы можете объявить его как final
, чтобы сделать это совершенно ясным, и чтобы компилятор предупреждал любого, кто пытается переназначить список. (Если бы это было требованием, ссылка должна была бы быть, по крайней мере, volatile
, но это открывает много других вопросов относительно правильности нескольких операций вашего класса).
Суть в том, что «безопасность потоков» - это не простая бинарная концепция. Нельзя просто сказать, что определенный класс и / или метод являются поточно-ориентированными; скорее речь идет о том, какие комбинации методов вы можете вызывать с полезной и правильной семантикой.