【问题标题】:Synchronized method calling other synchronized method同步方法调用其他同步方法
【发布时间】:2020-07-01 19:46:30
【问题描述】:
如果一个java同步方法调用另一个同步方法,对象是否还拥有原来同步方法的锁?
【问题讨论】:
标签:
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)
-
同步方法调用另一个同步方法 - 在同一对象上:
一旦线程获得了该对象的锁,那么只有它才允许访问
同步方法/块。一旦获得锁,那么该线程就可以
能够调用或访问该对象中的任何其他同步方法
相同的锁。
注意:在这种情况下,线程只有一个锁。
-
同步方法调用另一个同步方法 - 在另一个对象上:
一旦线程获得当前对象锁,然后线程调用另一个
其他对象上的方法然后需要获取另一个对象的锁然后
线程有两个对象锁。
注意:在这种情况下,线程有两个锁。
-
同步方法调用另一个同步方法 - 在多个对象上:
Method Chaining 处理线程通过多个同步方法然后
它将获取相应的对象锁,一旦它完成方法的执行,它将
释放对应对象的锁。
注意:在这种情况下,线程获得了多个对象锁。
注意:一个线程可以获取多个锁(或)'N' - 锁数。