嵌套的同步块是否比普通的同步块更快进入?或者,例如,以下哪个例程更快:
void routine1(SyncClass a) {
a.syncMethod1();
a.syncmethod2();
a.syncMethod1();
}
void routine2(SyncClass a) {
synchronized(a) {
a.syncMethod1();
a.syncmethod2();
a.syncMethod1();
}
}
方法是同步的。我正在考虑在不需要线程安全的情况下使用线程安全对象。因此,并发级别不受影响。
此外,答案平台是否依赖?
答案 0 :(得分:1)
不管平台如何,你最好synchronized
在性能方面尽可能最小的代码元素。
在synchronized
块中包装许多同步调用将降低并发性(以及性能)。只有在需要同步特定的调用序列时才能执行此操作。
如果您担心除之外的性能影响是从并发中获得的,我不知道哪个更快。但是,我认为你所描述的两种方法的性能差异都是难以察觉的。
答案 1 :(得分:0)
根据问题上留下的评论,似乎答案是肯定的。但有两点需要注意。
1)由于并行执行的机会较少,线程可能会更频繁地等待。
2)编译器可以自动优化这种方式。