JAva同期メソッドロック


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();
この場合は2つのオブジェクトであり、aとbの間には影響しません.
オブジェクトがロックされている(ロックされている)と、そのオブジェクトはAクラスのSynchronizedメソッドにアクセスできなくなり、Synchronizedメソッド以外のメソッドにアクセスできます.
上のコードは次のようになります.

public class A { 

    public void action1 { 

        synchronized (this) { 

        } 

    } 

    public void action2 { 

        synchronized (this) { 

        } 

    }