12

アプリ内のすべてをシングルトンから遠ざけようとしています。これはプログラミングの悪い慣行であることに気付いたからです。そうは言っても、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

4 に答える 4

13

はい、@SingletonDagger 2 の は、Dagger 1 と同じように、ダブル チェック ロックでスレッド セーフです。 を参照してくださいScopedProvider

于 2015-12-24T12:16:42.893 に答える
1

Artem Zinnatullin が彼の回答で述べたように、@Singleton クラスのインスタンス作成は、Dagger ではスレッドセーフです。

ただし、別のスレッドからそのシングルトンに触れる場合は、自分でスレッドセーフにする必要があります。そうしないと、ダガーは役に立ちません。

通常、@Singleton アノテーションは、他の開発者に対して、そのようなクラスが異なるスレッドから使​​用できることを意味する必要があります。

于 2015-05-14T15:09:12.723 に答える
-2

このサイトで略奪します。シングルトンを実装するにはさまざまなアプローチがありますが、その中には ThreadSafeSingleton があります

于 2015-05-14T14:54:59.583 に答える