java - 了解 Java 中的锁用法
问题描述
我试图了解 Java 中同步和锁之间的区别,但我发现了另一个我仍然不完全理解的问题: Java 中可重入锁中同步(对象)的等价物是什么?
特别是我不明白为什么 lock.lock() 被写在 try 块之外。
据我了解,锁是在方法体内部使用的,lock.lock() 是作为 try 块中的第一件事编写的,以确保一次只有一个线程可以执行该 try 块中的内容,直到锁被解锁使用 lock.unlock() 调用,它写在 try 块之后的 finally 块中。
但是如果 lock.lock() 在方法体之外和块之外被调用,那是什么意思呢?
解决方案
try-finally 构造是为了保证锁会被释放。
'lock' 写在 'try' 之前的原因是,在锁定完成之前,没有什么可以解锁 - 所以有一个 finally 子句无条件解锁可能没有被锁定的东西是一个错误。
推荐阅读
- javascript - 在移动设备上的图像之间滑动(左右)的最佳/最简单方法是什么?
- scala - 列表未在“foreach”语句中更新,返回空列表
- c# - 有没有办法通过脚本改变画布内元素的层顺序?
- xamarin - 在 Visual Studio 2019 for Mac 版本 8.2 之后无法构建
- reactjs - 在 Picker 元素中显示信息时出现问题
- ipfs - 为什么我可以访问文件,尽管没有固定它们?
- ggplot2 - 如何防止ggplot从箱线图中删除缺失值
- javascript - Babel Compile 停止命令链
- javascript - 检查号码的前缀
- c# - 在哪里放置 tesseract 语言文件以及数据路径字符串是什么样的?