Итак, вот фрагмент кода из статического метода EventBus getDefault (), который возвращает статический экземпляр класса EventBus.
/** Convenience singleton for apps using a process-wide EventBus instance. */
public static EventBus getDefault() {
EventBus instance = defaultInstance;
if (instance == null) {
synchronized (EventBus.class) {
instance = EventBus.defaultInstance;
if (instance == null) {
instance = EventBus.defaultInstance = new EventBus();
}
}
}
return instance;
}
Я вижу, что код сначала проверяет, является ли экземпляр нулевым, а затем снова в синхронизированном блокеделает ту же проверку еще раз.Почему это так.
Что если я напишу это так.
/** Convenience singleton for apps using a process-wide EventBus instance. */
public static EventBus getDefault() {
EventBus instance = defaultInstance;
if (instance == null) {
synchronized (EventBus.class) {
instance = EventBus.defaultInstance = new EventBus();
}
}
return instance;
}
Что-то не так с моей версией?Что мне здесь не хватает?