0

Java にスレッド セーフなシングルトン クラスがあると仮定すると、それを使用する最善またはより良い方法になります。たとえば、Singleton クラスが次のようになっているとします。

public class MySingleTon {
   // my thread-safe code goes here
}

そして、上記のシングルトンを次の 2 つの方法で使用するサービス クラスがあります。

1:

public class MyService {
   MySingleton singleton;

   public void myMethod1() {
      singleton  = MySingleton.getInstance();
      // code ...
   }

   public void myMethod2() {
      singleton = MySingleton.getInstance();
      // code...
   }
   public void myMethod3() {
      singleton = MySingleton.getInstance();
      // code...
   }
}

また

2:

public class MyService {

   public void myMethod1() {
      MySingleton singleton = MySingleton.getInstance();
      // code ...
   }

   public void myMethod2() {
      MySingleton singleton = MySingleton.getInstance();
      // code...
   }
   public void myMethod3() {
      MySingleton singleton = MySingleton.getInstance();
      // code...
   }
}

ケース 1 ではシングルトンがインスタンス変数を介して参照され、ケース 2 ではシングルトンがメソッド ローカル変数として参照されます。上記の両方のスニペットがマルチスレッド環境で使用されていることを考えると、どちらがより良いオプションであり、その理由は?

4

2 に答える 2

2

私はそれを第三の方法で定義します

public class MyService {
   final static MySingleton singleton = MySingleton.getInstance();

   public void myMethod1() {
      // code ...
   }

   public void myMethod2() {
      // code...
   }
   public void myMethod3() {
      // code...
   }
}

すべての場合において、スレッドセーフに違いはありません

于 2015-01-23T18:19:07.653 に答える
0

私の意見では、2の方が良いでしょう。これによりMySingleton、シングルトン インスタンスを強制終了し、必要に応じて再作成する自由が与えられます (つまり、デッドロックの自己検出またはリソース競合の軽減)。

于 2015-01-23T18:19:35.357 に答える