簡體   English   中英

是@Singleton在匕首2線程安全嗎?

[英]is @Singleton in dagger 2 thread safe?

我試圖將我的應用程序中的所有內容從單例中移開,因為我已經意識到這是一個糟糕的編程習慣,據說,我正在考慮實現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等效嗎?

是的,@ @Singleton在Dagger 2中具有雙重檢查鎖定的線程安全性,在Dagger 1中ScopedProvider 。請參閱ScopedProvider

正如Artem Zinnatullin在他的回答中提到的 - @Singleton類的實例創建在Dagger中是線程安全的。

但是如果你打算從不同的theads中觸摸那個單身人士,你必須自己使它成為線程安全的。 否則Dagger不會幫助你。

通常,@ Singleton注釋應該對其他開發人員來說意味着可以從不同的線程使用這樣的類。

這個網站搶劫。 實現Singleton有不同的方法,其中包括ThreadSafeSingleton

單身人士沒有任何問題。 但這是一個更好的實施。

public class SomeSinglton {
    private static ClassName sInstance = new SomeSinglton();

    private SomeSinglton () {
    }

    public static ClassName getInstance() {
        return sInstance;
    }

當靜態字段sInstance被初始化時,存在隱式同步。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM