2017-01-02 10 views
0

IBM обучающей 5 things you didn't know about ... java.util.concurrent, Part 1 утверждает, что Java tutorial Guarded blocks пример содержит "огромную ошибку", но не определяет его:"Огромная ошибка" в защищенных блоках Java

Bug смотреть!

Кстати, вы правы, если заметили, что Guarded Blocks содержит огромную ошибку - что произойдет, если разработчик синхронизируется с экземпляром Drop внутри main()?

Кто такой?

Если ошибка была исправлена ​​в учебнике по Java, это произошло в период с мая 2010 года по ноябрь 2011 года, потому что код похож на WebArchive.

+0

Почему бы вам не попросить Теда Ньюарда прямо? –

+0

Я предполагаю, что он считает синхронизацию по общедоступным ссылкам плохой практикой (поскольку люди из «снаружи» могут испортить вашу логику). Я бы не назвал это «огромной ошибкой», особенно не в коде учебника об уведомлениях ... –

+0

@LukasEder, в учебнике IBM есть тот же вопрос, и никто не ответил на него. – Gedrox

ответ

2

Ответы, приведенные выше (Артур и Гедрокс), являются правильными - нарушение инкапсуляции для синхронизации на самом объекте капли, поскольку любой (снаружи) мог также приобрести этот монитор и тем самым полностью нарушить работу механики сигнализации.

Я не очень долго смотрел код Java Tutorial, но я действительно помню, как он смотрел на него при написании статьи. Если они исправили это, это было после того, как я посмотрел на него.

Что касается того, является ли это «огромной ошибкой» или нет, я согласен с утверждением, что это так; все, что может испортить схему синхронизации, следует избегать, поскольку отслеживание этого процесса потребует очень высокой степени владения системой синхронизации Java, кодового пути, который последовательно приводит к тупиковой ситуации, и хорошее знакомство со всеми возможными перестановками, так что можно было бы рассуждать об этом вне среды отладки. Это не отличный рецепт успеха.

 Смежные вопросы

  • Нет связанных вопросов^_^