【问题标题】:Synchronized method calling other synchronized method同步方法调用其他同步方法
【发布时间】:2020-07-01 19:46:30
【问题描述】:

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

【问题讨论】:

  • 是的。并且当线程将尝试调用在同一个锁上同步的另一个方法时,它不会等待,而是再次获取它(它会增加它获取该锁的次数的计数器)。然后,当它结束该附加方法时,它将返回该锁(通过减少该计数器)。要了解有关它的更多信息,请研究“重入锁”。你会发现像What is the Re-entrant lock and concept in general?这样的问题
  • 您是否还问过当这是两个不同的锁时会发生什么?

标签: java multithreading synchronization


【解决方案1】:

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

我。对象锁定

二。类锁

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

     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' - 锁数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    相关资源
    最近更新 更多