java - Lock 是否在单个线程上作为布尔信号量工作?
问题描述
我需要一个 Java 中的互斥锁,它在单个线程内和跨线程都提供独占访问。像这样做一些非常简单的事情:
Lock l = new ReentrantLock();
for (int i = 0; i < 5; i++) {
Log.d(TAG, "Lock = " l.tryLock());
}
令人惊讶的是,我每次来电都是如此:
Lock = true
Lock = true
Lock = true
Lock = true
Lock = true
为什么会这样,或者我从根本上做错了什么?
解决方案
顾名思义,它是可重入的,这意味着拥有线程可以重新获取它。
这是一件好事,否则您可以轻松创建单线程死锁。
所以不,它不充当布尔信号量。如果您想要一个布尔信号量,请使用new Semaphore(1);
. 尽管如果您确实打算导致自死锁,请确保您有另一个线程可以解决它。
推荐阅读
- c - 计算c中布隆过滤器的汉明距离?
- jquery - 将缩略图扩展到更大尺寸的图像,反之亦然
- c# - C#:使用共享项目时推荐的目录结构
- jquery - 更改 div 而不是 body 的背景颜色
- reactjs - 如何在 Google 图表的 X 轴上添加垂直线(线型)?
- android - 尝试在 android 中登录 QBChat 服务时崩溃
- r - 基于累积和创建变量,并根据条件重置
- lighttpd - Lighttpd git-http-backend setenv 问题
- python - 直接从 HDFS 将 xgboost 模型导入 pyspark 脚本
- java - 在“graphView”标签不从原点开始