嵌套同步的速度

时间:2012-06-17 22:06:08

标签: java synchronized

嵌套的同步块是否比普通的同步块更快进入?或者,例如,以下哪个例程更快:

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

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

方法是同步的。我正在考虑在不需要线程安全的情况下使用线程安全对象。因此,并发级别不受影响。

此外,答案平台是否依赖?

2 个答案:

答案 0 :(得分:1)

不管平台如何,你最好synchronized在性能方面尽可能最小的代码元素。

synchronized块中包装许多同步调用将降低并发性(以及性能)。只有在需要同步特定的调用序列时才能执行此操作。

如果您担心之外的性能影响是从并发中获得的,我不知道哪个更快。但是,我认为你所描述的两种方法的性能差异都是难以察觉的。

答案 1 :(得分:0)

根据问题上留下的评论,似乎答案是肯定的。但有两点需要注意。

1)由于并行执行的机会较少,线程可能会更频繁地等待。

2)编译器可以自动优化这种方式。