public class A { 

  public synchronized void action1 { 

  } 

  public synchronized void action2 { 

  } 

 

A a = new A(); 

a.action1(); 

 

 

非静态方法的 synchronized 是锁住整个对象

但是如果是这样的:

A a = new A();

A b = new A();

那么此时是两个对象,a和b之间不会有影响

一旦该对象持有锁(被上锁),那么这个对象就不能再访问A类中的任何Synchronized方法,非Synchronized方法还是可以访问的。


上面的代码相当于如下:

public class A { 

    public void action1 { 

        synchronized (this) { 

        } 

    } 

    public void action2 { 

        synchronized (this) { 

        } 

    }