-2

メソッド・パラメーターがこのキーワードの代わりに同期ブロックで使用されている場合の Java 同期の動作。

public void doSomething(final MyInterface iface) {
  synchronized(this) {
    // ... do some work
  }
}

public void doSomething(final MyInterface iface) {
  synchronized(iface) {
    // ... do some work
  }
}

正味の効果は同じですか?

4

2 に答える 2

2

2つのケースは完全に異なります。

を使用するsynchronizedと、引数として渡されたオブジェクトに対してロック (モニター) が取得されます。

synchronized(this)--> スレッドは「現在の」オブジェクトのロックを取得します。

synchronized(iface)--> スレッドは「iface」オブジェクトのロックを取得します

正味の効果は同じですか?

いいえ、効果は壊滅的に異なる可能性があります。

于 2015-03-04T09:46:32.903 に答える
1

読んだことがありますJLSか?キーワードの同期thisは、(メソッドが呼び出された) オブジェクト自体の同期を意味します。thisオブジェクトとパラメーターによって参照されるオブジェクトは、一般的に同じものではないことは明らかです。

于 2015-03-04T09:47:34.833 に答える