Хотя l oop в Singleton вместо блока if - PullRequest
0 голосов
/ 10 июля 2020

Я наткнулся на приведенный ниже код как часть создания синглтона с использованием DoubleLocking

public static ThreadSafeSingleton getInstanceUsingDoubleLocking(){
    while(instance == null){
        synchronized (ThreadSafeSingleton.class) {
            while(instance == null){
                instance = new ThreadSafeSingleton();
            }
        }
    }
    return instance;
}

Какое значение имеет использование while loop вместо обычного if block? Это связано с некоторыми JMM issues, которые могут повлиять на создание синглтона в многопоточной среде?

1 Ответ

3 голосов
/ 10 июля 2020

Использование while l oop не требуется.

Каждый из циклов будет выполняться только ноль или один раз, поэтому они эквивалентны if.

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