0

次のような var インスタンス化を同期しようとしています。

Object o = new Object();
String s = null;

void getS() {
  if (s != null) {
    return s;
  }
  // multiple threads stopping here
  // maybe using readwritelock? write.lock?
  syncronize(o) {
    // if previous thread stopped by sync block
    // completed before, bypass this
    if (s != null) {
      return s;
    }

    // no one before, instantiate s
    s = "abc";
  }
  return s; 
}

var の単一のインスタンス化を処理するより良い方法はありますか? たぶんロックを使用していますか?

4

2 に答える 2

1

書くのが最も簡単です:

private Foo foo;
public synchronized Foo getFoo() {
    if (foo == null) {
        foo = new Foo();
    }
    return foo;
}

欠点は、同期が最初に必要な場合でも、このプロパティにアクセスするたびに同期が発生することです。

同じことを達成できる方法についての多くの情報については、Google の「Java でロックを二重にチェックしました」を参照してください。

于 2013-09-04T13:32:11.623 に答える