(memory consistency, критические секции) можно юзать volatile и synchronized-блоки, а можно Atomic-и и Lock. Я читал, что второй вариант всегда предпочтительнее первого в плане быстродействия. Так ли это? Всегда ли нужно обращатсья для простых задач синхронизации к классам вместо языковых фич?
Так что скажите на счет синхронизации?
Ну так от задачи зависит. Но общий совет обычно всегда сначала делай наиболее простым и надежным способом, а уж потом оптимизируй по потребности.
То есть synchronized и volatile вполне себе ок, если требований особых нет?
Как раз volatile сомнительно довольно. Да и syncronize если речь просто про навешивание на поля класса тоже.
Синкронайзд в моем вопросе про критические секции больше
Надо задачу формулировать. Все инструменты так или иначе применяются.
Управляющая переменная (флаг того, что инициализация была проведена) и кусок кода, который должен быть выполнен только раз и строго в одном потоке, кто бы и где не пытался вызвать
звучит как задача для static initializer или конструктора
Тогда без вариантов не покатит просто на поле навесить. Тебе весь код оборачивать нужно будет в блок синхронизированный. Но вообще да, выглядит странно действительно немного.
В java concurrency на практике кстати вроде читал что конструктор не потокобезопасен
чаво?)
То есть стоит сделать что-то вроде синглтона, где объект будет статическим полем идти?
Ща попробую найти. Там суть в том была что ссылка на класс доступна уже когда конструктор выполняется.
не знаю, от задачи зависит :)
ага, здесь надо либо иметь final-поле в инициализируемом объекте, либо публиковать через volatile-поле
Обсуждают сегодня