Использование volatile без синхронизации для ленивых синглтонов в шаблоне проекта Android Studio «Login Activity» - PullRequest
2 голосов
/ 11 июля 2019

Я изучаю Android и изучаю базовые шаблоны проектов, предоставляемые Android Studio 3.4.1.Тот, который называется «Активность при входе» (доступен через Новый проект ...), устанавливает реализацию с классом репозитория в LoginRepository.java

    public class LoginRepository {

        private static volatile LoginRepository instance;

        private LoginDataSource dataSource;

        private LoggedInUser user = null;

        // private constructor : singleton access
        private LoginRepository(LoginDataSource dataSource) {
            this.dataSource = dataSource;
        }

        public static LoginRepository getInstance(LoginDataSource dataSource) {
            if (instance == null) {
                instance = new LoginRepository(dataSource);
            }

            return instance;
        }

        // other methods excluded for simplicity
    }
}

ссылка на описание android.com
ссылка на другой вопрос с большим количеством кода приложения

Использование volatile предполагает, что они хотят поточной безопасности (хотя я не уверен почему, так как это выглядит какоднопоточное приложение).

  1. Если требуется защита потоков, то почему в методе getInstance нет synchronized?

  2. Если потокобезопасность не требуется, почему используется volatile?

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

Спасибо

...