java - 同步方法调用其他同步方法
问题描述
如果一个java同步方法调用了另一个同步方法,对象是否还有原来同步方法的锁?
解决方案
为了更好地理解同步和锁必须知道以下内容:
一、对象锁定
二、类锁
以下解释仅用于对与您的问题相关的对象锁定的基本或低级理解
:
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' - 锁的数量。
推荐阅读
- c# - 带有 FtpWebRequest 上传的 C# FTP 失败并显示“534 策略需要 ssl”
- javascript - 如何使用 Javascript 在输入标签上设置默认日期时间戳?
- node.js - NodeJS api没有返回任何响应
- php - PHP在嵌套循环中超出内存分配
- python - 这样的正则表达式哪里错了?
- reactjs - 使用默认值反应路由参数
- php - 如何更改按钮的标题(kartik FileInput 小部件)
- azure - 使用 ADF 复制活动映射使用变量编写动态列名的最简单方法是什么?
- unit-testing - redux saga 测试取消(任务):参数 [object Object] 不是有效的 Task 对象
- python - 在数据框中分组后如何保持该行空间?