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

Ale*_*.B. 9 java multithreading android 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;
    }
Run Code Online (Sandbox Code Playgroud)

就同​​步而言,是Dagger 2 @Singleton的等价物吗?

Art*_*lin 9

@Singleton的,Dagger 2中的s是双线锁定的线程安全,在Dagger 1中也是如此.参见ScopedProvider.


Ayz*_*zen 1

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

但是如果你要接触来自不同线程的单例,你必须自己确保它的线程安全。否则匕首不会帮助你。

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