代码之家  ›  专栏  ›  技术社区  ›  Ricket

同步块等价于静态同步方法?

  •  4
  • Ricket  · 技术社区  · 14 年前

    当您有如下方法时:

    public synchronized void addOne() {
        a++;
    }
    

    相当于以下内容:(如果我错了,请纠正我)

    public void addOne() {
        synchronized(this) {
            a++;
        }
    }
    

    但是,下面的方法等价于什么呢?:

    public static synchronized void addOne() {
        a++;
        // (in this case 'a' must be static)
    }
    

    什么是与静态同步方法作用相同的同步块? 我知道静态同步方法是在类上同步的,而不是在实例上同步的(因为没有实例),但是它的语法是什么?

    1 回复  |  直到 14 年前
        1
  •  10
  •   Quartermeister    14 年前

    它相当于锁定类对象。您可以通过在类名称后面加上 .class . 所以,有点像:

    synchronized(YourClass.class) {
    }
    

    Java Language Specification, Section 8.4.3.6 synchronized Methods :

    同步方法获取锁 (_§17.1)在执行之前。对于一个 类(静态)方法,锁 与的类对象关联 使用了方法的类。对于一个 实例方法,关联的锁 与此(对象 方法被调用)。