In einem multithreaded Android-Projekt Java, ich sehe Code wie folgt:Test ist ein schwacher Verweis es vor der Verwendung
final WeakReference<MyClass> myClassObjectWeakRef =
new WeakReference<MyClass>(aMyClassObject);
... dann woanders:
if (myClassObjectWeakRef.get() != null) {
myClassObjectWeakRef.get().someMethod();
}
Ich bin ziemlich Sicher gibt es eine mögliche Wettlaufsituation zwischen der Überprüfung und der Verwendung der Referenz, wenn die letzte starke Referenz auf das Objekt zwischen den beiden in einem anderen Thread freigegeben wird, aber ich kann keine Dokumentation finden oder wer/wer kann das bestätigen besser als mit einem "du hast wahrscheinlich recht".
Ich würde denken, den einzigen richtigen Weg & verwenden, um eine schwache Referenz zu testen, wird wie folgt durchgeführt:
MyClass myObject = myClassObjectWeakRef.get();
// we now have a strong reference, or null: standard checks apply.
if (myObject != null) {
myObject.someMethod();
}
ich sehr zuversichtlich bin, dass die zweite Methode ist 100% sicher, aber ich frage mich, ob es einige Java/Compiler Zucker/Magie, die ich nicht kenne, die die erste Methode sicher machen würde.
Also, ist die erste Methode 100% sicher, oder nicht?
Sie haben wahrscheinlich Recht, ;-) – petey
Es sollte keinen eingebauten Java/Compiler Zucker/Magie geben, um sicherzustellen, dass Methode # 1 immer funktioniert. Ihr Verständnis der Situation stimmt mit meinem Verständnis der Situation überein. – NoseKnowsAll
Danke für die Frage –