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

根据对该问题的评论,答案似乎是肯定的。但有两个警告。

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

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

于 2013-12-28T11:57:12.910 回答