嵌套同步块是否比正常同步块更快进入?或者,例如,以下哪个例程更快:嵌套同步的速度
void routine1(SyncClass a) {
a.syncMethod1();
a.syncmethod2();
a.syncMethod1();
}
void routine2(SyncClass a) {
synchronized(a) {
a.syncMethod1();
a.syncmethod2();
a.syncMethod1();
}
}
这些方法是同步的。我正考虑在不需要线程安全的情况下使用线程安全对象。所以并发级别不受影响。
另外,答案平台是否依赖?
你必须考虑的是在进行细粒度同步时的正确性。至于答案例程2速度更快,除非JVM粗加显示器并像例程2那样编译例程1。锁定/解锁没有固有的好处,除非中间有一些代码。 – bestsss
@bestsss在什么情况下JVM会使显示器变得粗大,以及为什么,究竟是什么意思?你有链接到文档? – warren
显示器粗化是一种避免频繁进入显示器的技术,因为它不是免费的操作,需要CAS。一旦你有关键字(锁定变粗),谷歌往往会产生相当不错的结果 - 所以最初的java6白皮书:http://java.sun.com/performance/reference/whitepapers/6_performance.html#2.1.2 – bestsss