小编Geo*_*ges的帖子

在使用java之前测试弱引用

在多线程Android项目中,我看到的代码如下:

final WeakReference<MyClass> myClassObjectWeakRef =
                new WeakReference<MyClass>(aMyClassObject);
Run Code Online (Sandbox Code Playgroud)

......然后在其他地方:

if (myClassObjectWeakRef.get() != null) {
  myClassObjectWeakRef.get().someMethod();
}
Run Code Online (Sandbox Code Playgroud)

我很确定在检查和引用的使用之间可能存在竞争条件,如果对象的最后一个强引用是在另一个线程中的两个之间释放,但我找不到任何文档或任何人/ /谁可以比"你可能是对的"更好地证实这一点.

我认为测试和使用弱引用的唯一正确方法是这样做的:

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

我非常有信心,第二个方法是100%安全的,但我不知道是否有一些Java /编译糖/魔法,我不知道,这会使得第一种方法是安全的.

那么,第一种方法是否100%安全?

java android weak-references

21
推荐指数
1
解决办法
1946
查看次数

标签 统计

android ×1

java ×1

weak-references ×1