是@Singleton在匕首2线程安全吗?

时间:2015-05-14 14:47:07

标签: java android multithreading thread-safety dagger-2

我试图将我的应用中的所有内容从单身人员中移开,因为我已经意识到这是一个糟糕的编程习惯,我说,我正在考虑实施Dagger 2依赖注入。而且我想知道,当你在Dagger 2中执行@Singleton时,该线程是否同步?如果没有,我怎么能同步它,所以我不会从多个线程触及相同的东西得到任何奇怪的数据异常。

在我做这样的事情之前,当我创造单身时:

public class SomeSinglton {
    private static ClassName sInstance;

    private SomeSinglton () {
    }

    public static synchronized ClassName getInstance() {
        if (sInstance == null) {
            sInstance = new ClassName();
        }
        return sInstance;
    }
就同​​步而言,

是Dagger 2 @Singleton的等价物吗?

4 个答案:

答案 0 :(得分:8)

是的,Dagger 2中的@Singleton是线程安全的,双重检查锁定,Dagger 1中相同。请参阅ScopedProvider

答案 1 :(得分:1)

正如Artem Zinnatullin在他的回答中提到的 - @Singleton类的实例创建在Dagger中是线程安全的。

但是如果你打算从不同的theads中触摸那个单身人士,你必须自己让它保持线程安全。否则Dagger不会帮助你。

通常,@ Singleton注释应该对其他开发人员来说意味着可以从不同的线程使用这样的类。

答案 2 :(得分:-1)

this site点击。有不同的方法来实现Singleton,其中包括ThreadSafeSingleton

答案 3 :(得分:-1)

单身人士没有任何问题。但这是一个更好的实现。

PFImageView

当静态字段public class SomeSinglton { private static ClassName sInstance = new SomeSinglton(); private SomeSinglton () { } public static ClassName getInstance() { return sInstance; } 被初始化时,存在隐式同步。