§67 Избегайте излишней синхронизации
Для того, чтобы избежать падений и проблем с безопасностью, никогда не передавайте управление клиенту в synchronized блоке.
Где:
Но! Дурацкие примеры будут работать
ConcurrentModificationException Мы пытаемся удалить эл-т из списка, не закончив бежать по его эл-там
Deadlock: фоновый поток пытается залочить observers, в то время как основной ждет его завершения
К счастью, как правило, это довольно легко исправить. Или используя thread-safe CopyOnWriteArrayList, заплатив за это созданием копии массива при каждой операции изменения
Нет synchronized блоков – и эта реализация thread-safe Как правило справедливо следующее: делайте как можно меньше операций внутри synchronized блока
String StringBuffer StringBuilder Ужас Лучше, но все операции синхронизированы Все очень быстро и не синхронизировано Всегда следует синхронизировать изменение static величин Как правило нет нужды делать ваш класс thread-safe, и работающим даже в условиях ядерной зимы. Но есть необходимость документировать это!