Страницы

Поиск по вопросам

вторник, 20 ноября 2018 г.

Зачем в getInstance synchronized?

Зачем в этом getInstance synchronized делать ?
Это класс-синглтон для работы с сетью с использованием retrofit.
public static NetworkWorker getInstance(){ if (networkWorker == null){ synchronized (NetworkWorker.class) { if (networkWorker == null) { networkWorker = new NetworkWorker(); } } } return networkWorker; }


Ответ

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

Комментариев нет:

Отправить комментарий