This question already has answers here:
Is there an advantage to use a Synchronized Method instead of a Synchronized Block?
(23个答案)
3年前关闭。
Java中的同步方法和同步块(synchronized block)有什么区别?
我一直在网上搜索答案,人们似乎对此不太确定:-(
我的看法是,两者之间没有什么区别,只是synch块的作用域可能更多,因此锁定的时间更少了?
如果在静态方法上使用Lock,则采用哪种Lock?类(class)锁是什么意思?
对于静态方法,该类将被锁定:
对于同步块(synchronized block),可以将任何非
锁定范围
对于同步方法,该锁将在整个方法范围内保持,而在
(23个答案)
3年前关闭。
Java中的同步方法和同步块(synchronized block)有什么区别?
我一直在网上搜索答案,人们似乎对此不太确定:-(
我的看法是,两者之间没有什么区别,只是synch块的作用域可能更多,因此锁定的时间更少了?
如果在静态方法上使用Lock,则采用哪种Lock?类(class)锁是什么意思?
最佳答案
同步方法将方法接收者用作锁(对于非静态方法,即this
;对于静态方法,其封闭类)。 Synchronized
块将表达式用作锁。
因此,锁定预期对象后,以下两种方法是等效的:
synchronized void mymethod() { ... }
void mymethod() {
synchronized (this) { ... }
}
对于静态方法,该类将被锁定:
class MyClass {
synchronized static mystatic() { ... }
static mystaticeq() {
syncrhonized (MyClass.class) { ... }
}
}
对于同步块(synchronized block),可以将任何非
null
对象用作锁:synchronized (mymap) {
mymap.put(..., ...);
}
锁定范围
对于同步方法,该锁将在整个方法范围内保持,而在
synchronized
块中,仅在该块范围内保持该锁(否则称为临界区)。实际上,如果JVM可以证明可以安全地进行操作,则可以通过从synchronized
块执行中删除一些操作来进行优化。10-08 03:06