1

シングルトンパターンで質問があります。シングルトンパターンでは、次のように記述します

synchronized(ClassName.class){

     // other code goes here

}

書く目的は何ClassName.classですか?

4

3 に答える 3

4

メンバー メソッド (非静的) では、使用するモニター (ロック) の 2 つの選択肢があります。「this」と「my class's single static lock」です。

オブジェクト インスタンスのロックを調整することが目的の場合は、" this "を使用します。

...
synchronized (this) {
  // do critical code
}

また

public synchronized void doSomething() {
 ...
}

ただし、次のいずれかを含む安全な操作を行う場合:

  • 静的メソッド

  • クラスの静的メンバー

次に、クラス全体のロックを取得することが重要です。静的ロックで同期するには 2 つの方法があります。

...
synchornized(ClassName.class) {
   // do class wide critical code
}

また

public static synchronized void doSomeStaticThing() {
   ...
}

非常に重要なことですが、次の 2 つの方法は同じロックでは連携しません。

public synchronized void doMemberSomething() {
   ...
}

public static synchronized void doStaticSomething() {
   ...
}
于 2014-11-15T14:48:35.900 に答える