W wielowątkowym projektem Android, widzę kod tak:test słaby odniesienia przed użyciem Java
final WeakReference<MyClass> myClassObjectWeakRef =
new WeakReference<MyClass>(aMyClassObject);
... potem gdzieś indziej:
if (myClassObjectWeakRef.get() != null) {
myClassObjectWeakRef.get().someMethod();
}
jestem ładna że istnieje pewna możliwość wyścigu między sprawdzeniem a użyciem referencji, jeśli ostatnie silne odwołanie do obiektu zostanie zwolnione między dwoma w innym wątku, ale nie mogę znaleźć żadnej dokumentacji ani nikogo, kto/może potwierdzić to lepiej niż z "prawdopodobnie masz rację".
Myślę jedyną właściwą drogę do przetestowania & użyciu słabego odniesienia odbywa się to tak:
MyClass myObject = myClassObjectWeakRef.get();
// we now have a strong reference, or null: standard checks apply.
if (myObject != null) {
myObject.someMethod();
}
Jestem przekonana, że druga metoda jest w 100% bezpieczne, ale zastanawiam się, czy istnieje trochę java/kompilatora cukru/magii, o których nie wiem, co uczyniłoby pierwszą metodę bezpieczną.
Tak, to pierwsza metoda w 100% bezpieczne, czy nie?
pewnie masz rację ;-) – petey
Tam nie powinno być żadnych wbudowanych w Java/cukier kompilator/magic celu zapewnienia metoda nr 1 zawsze będzie działać. Twoje zrozumienie sytuacji pasuje również do mojego zrozumienia sytuacji. – NoseKnowsAll
Dzięki za pytanie –