在Java类中执行Synchronized方法时,哪个Object被锁定?

时间:2015-10-16 12:37:58

标签: java multithreading

在Java类中执行Synchronized方法时,哪个Object被锁定?

1 个答案:

答案 0 :(得分:0)

对于静态方法,类被锁定

class A { 
    static synchronized void method() {

就像,但与

完全相同
class A { 
    static void method() {
        synchronized(A.class) {

在这种情况下 - 如果一个Thread已经在执行此方法,那么没有其他Thread可以调用此方法。
对于实例方法,实例被锁定。

class A { 
    synchronized void method() {

大致相同
class A { 
    void method() {
        synchronized(this) {

在这种情况下 - 如果初始化了不同的实例对象,则每个实例的一个Thread可以进入该执行块。

注意:一种常见的误解是方法中存在锁定或方法被锁定。事实并非如此,事实上没有标准的方法可以做到这一点。