Проверьте слабую ссылку перед использованием Java

В многопоточном проекте Android я вижу такой код:

final WeakReference<MyClass> myClassObjectWeakRef =
                new WeakReference<MyClass>(aMyClassObject);

... тогда где-то еще:

if (myClassObjectWeakRef.get() != null) {
  myClassObjectWeakRef.get().someMethod();
}

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

Я думаю, что единственный правильный способ проверить и использовать слабую ссылку делается так:

MyClass myObject = myClassObjectWeakRef.get();
// we now have a strong reference, or null: standard checks apply.
if (myObject != null) {
  myObject.someMethod();
}

Я очень уверен, что второй метод безопасен на 100%, но мне интересно, есть ли какой-нибудь сахар / магия Java / компилятора, о которых я не знаю, что сделало бы первый метод безопасным.

Итак, является ли первый метод безопасным на 100% или нет?

Ответы на вопрос(1)

Ваш ответ на вопрос