首页 > 解决方案 > 同步方法调用其他同步方法

问题描述

如果一个java同步方法调用了另一个同步方法,对象是否还有原来同步方法的锁?

标签: javamultithreadingsynchronization

解决方案


为了更好地理解同步和锁必须知道以下内容:

一、对象锁定

二、类锁

以下解释仅用于对与您的问题相关的对象锁定的基本或低级理解

     NOTE:
     Only Threads can Acquire or Release Locks.
     Each Object has it's Own Object Lock. (Specific to Object / Instance)
     Class Lock will be only One. (Specific to Class)

     Example:

            Employee e1 = new Employee();
            Employee e2 = new Employee();
            Employee e3 = new Employee();

            Total Available Object Lock Count : 3 (THREE)
            Total Available Class  Lock Count : 1 (ONE)
  1. 同步方法调用另一个同步方法 - 在同一对象上:

    一旦线程获得了该对象的锁,那么只有它才允许访问
    同步的方法/块。一旦获得了锁,那么该线程就可以使用相同的锁调用或访问该对象中的任何其他同步方法。

    注意:在这种情况下,线程只有一个锁。

  2. 同步方法调用另一个同步方法 - 在另一个对象上:

    一旦线程获得当前对象锁,然后线程调用另一个对象上的另一个方法,然后需要获得另一个对象的锁,那么线程就有两个对象锁。

    注意:在这种情况下,线程有两个锁。

  3. 同步方法调用另一个同步方法 - 在多个对象上:

    Method Chaining 处理线程经过多个同步方法后,会获取对应的对象锁,一旦方法执行完毕,就会释放对应对象的锁。

    注意:在这种情况下,线程获得了多个对象锁。

    注意:一个线程可以获取多个锁(或)'N' - 锁的数量。


推荐阅读