3

ネストされた同期ブロックは、通常の同期ブロックよりも速く入りますか?または、たとえば、次のルーチンのどれが速いか:

void routine1(SyncClass a) {
  a.syncMethod1();
  a.syncmethod2();
  a.syncMethod1();
}

void routine2(SyncClass a) {
  synchronized(a) {
    a.syncMethod1();
    a.syncmethod2();
    a.syncMethod1();
  }
}

メソッドは同期されます。スレッドセーフが不要な状況でのスレッドセーフオブジェクトの使用を検討しています。したがって、並行性のレベルは影響を受けません。

また、回答プラットフォームは依存していますか?

4

2 に答える 2

1

synchronizedプラットフォームに関係なく、パフォーマンスの観点から、可能な限り最小のコード要素を使用することをお勧めします。

同期された多数の呼び出しをsynchronizedブロックにラップすると、同時実行性(およびパフォーマンス)が低下します。特定の呼び出しシーケンスを同期する必要がある場合にのみ実行してください。

同時実行によるパフォーマンスへの影響以外にパフォーマンスへの影響が心配な場合は、どちらが速いかわかりません。ただし、説明する両方の方法でのパフォーマンスの違いは認識できないと思います。

于 2012-06-17T22:09:35.553 に答える
0

質問に残されたコメントによると、答えはイエスのようです。ただし、2 つの注意点があります。

1) 並列実行の機会が少ないため、スレッドはより頻繁に相互に待機する可能性があります。

2) コンパイラは、この方法で自動的に最適化する場合があります。

于 2013-12-28T11:57:12.910 に答える