首页 > 解决方案 > 从另一个同步方法调用同步方法,两者都在不同的对象上

问题描述

假设我们有两个类 A、B 和各个类的同步方法 methodA、methodB。如果我们从同步的方法A调用同步的方法B,当方法B仍在执行时,线程是否仍然持有对象A的锁?

Class A
{
   public synchronized void methodA()
   {
       //do something;
       synchronized(ObjectB)
       {
          ObjectB.methodB();
       }
   }
}

Class B
{
   public synchronized void methodB()
   {
      //do something
   }
}

标签: javamultithreadingsynchronization

解决方案


只要您处于同步块中,锁定就会保持。可以根据需要锁定尽可能多的锁,但这种嵌套同步会影响应用程序的整体性能。


推荐阅读