Android: Почему бы не синхронизировать все методы?

#android

#Android

Вопрос:

Есть ли какие-либо недостатки в синхронизации каждого из ваших методов в Android?

Комментарии:

1. Да, он не будет делать то, что вы думаете.

Ответ №1:

Да — в конечном итоге это приведет к снятию блокировок, когда они вам действительно не нужны. Это не даст вам потокобезопасности бесплатно — это просто замедлит ваш код и повысит вероятность того, что вы столкнетесь с тупиками из-за снятия слишком большого количества блокировок.

Вам нужно явно подумать о безопасности потоков и синхронизации. Обычно я делаю большинство классов не потокобезопасными и пытаюсь ограничить количество мест, где я думаю о потоковой передаче.

Подход «сделать все синхронизированным» является распространенным в том, что я считаю четырьмя этапами понимания потоков для разработчиков:

  • Полное невежество: нет синхронизации, нет осведомленности о потенциальных проблемах
  • Некоторая осведомленность, но вера в то, что универсальная синхронизация лечит все болезни
  • Болезненный этап понимания того, где есть проблемы, и большой заботы о том, чтобы все было правильно
  • Мифическая стадия естественного получения всего правильного

Насколько я могу судить, большинство опытных разработчиков находятся на стадии 3 — с разным уровнем удобства, конечно. Использование неизменности, абстракций более высокого уровня вместо низкоуровневых примитивов и т. Д. Очень Помогает, Но в конечном итоге вам, вероятно, придется много думать, когда у вас есть несколько потоков, которым необходимо совместно использовать состояние.

Комментарии:

1. Спасибо, у меня было ощущение, что это не может быть так просто 🙂