Re[5]: Почему монитором явщяется Object
От: devcoach  
Дата: 17.05.14 18:39
Оценка:
Здравствуйте, webserg, Вы писали:

W>Лок могут захватить кто угодно, так как доступ к объкту класса публичный. И надо следить везде где объект используется, то есть по всему приложению, правильно ли его синхронизируют и не будет ли deadlock. А если объявить просто приватный объект и использовать его для монитора, то все видно в одном классе.

Ну могут, и что с того? А дайте ка мне хоть один на 100% безопасный базовый инструмент синхронизации.

volatile безопасен? Нет, ведь нерадивый программист может изменить поле volatile объекта, подумав, что volatile распространяется и на, все что находится внутри объекта.
final безопасен? Нет, ведь нерадивый программист может потерять гарантии final, если из места обращения к final полю у него будет доступна ссылка на это же поле, но без final семантики.
А ReentrantLock безопасен? Нет, ведь программист может взять лок одном потоке, а отпустить в другом, и, не приведи господь, получить IllegalMonitorStateException!

Безопасных инструментов нет. Более того, они и не нужны. Нужны инструменты, которые легко освоить и легко применять. И synchronized как раз таким и является. А если кто-то не умеет его использовать — пускай почитает соответствующую литературу
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.