Безопасен ли поток создания одиночных файлов Java? - PullRequest
0 голосов
/ 07 октября 2018

Мне нравится простота энергичного синглтона в java, и большинство статей о нем называют его создание потокобезопасным.

class Singleton {

public static final Singleton instance = new Singleton ();

    private Singleton (){};

    public static Singleton getInstance(){

        return instance;

    }
}

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

Гарантируется ли создание Eager Singleton JVM поточно-ориентированным, чтобы, например, 2 потока случайно не создали синглтон одновременно?

Редактировать:Требуется ли ключевое слово final для безопасности потока при создании объекта?Разве это не нить, если поле не является окончательным?

1 Ответ

0 голосов
/ 07 октября 2018

Подход, который вы используете, является потокобезопасным.Поскольку вы не ссылались на те претензии, о которых говорите, я не могу напрямую их рассматривать.Но спецификация языка Java ясна по этому вопросу.

В разделе 17.5 она описывает поля

final, что также позволяет программистам реализовывать потоки-safe неизменяемые объекты без синхронизации. Потокобезопасный неизменяемый объект рассматривается как неизменяемый всеми потоками, даже если для передачи ссылок на неизменяемый объект между потоками используется гонка данных.Это может обеспечить гарантии безопасности от неправильного использования неизменяемого класса из-за неправильного или вредоносного кода.поля final должны использоваться правильно, чтобы обеспечить гарантию неизменности.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...