java - 信号是否保证到达线程?
问题描述
假设我有三个线程,T1, T2, T3
一个锁和一个资源上的lock
一些条件。cond
Resource
T1
获取锁,现在cond.await()
由于某些条件而T2
获取锁,cond.signal()
然后继续执行lock.unlock()
,但是有一段时间,T3
也试图获取锁,所以它在 行lock.lock()
,到底发生了什么?
是否T2
重新获得锁或确实T3
获得它或者它是基于调度程序随机的?
解决方案
如果您阅读文档,即 的 javadoc ReentrantLock
,它在第 3 段中专门回答了这个问题:
此类的构造函数接受一个可选的公平参数。设置时
true
,在争用情况下,锁有利于授予对等待时间最长的线程的访问权限。否则,此锁不保证任何特定的访问顺序。
推荐阅读
- api - 如何在 Plupload API 中为文件名特殊字符验证添加过滤器?
- html - 为什么我的容器在 Chrome 以外的其他浏览器中比它的子容器宽?
- javascript - es6可以导入commonjs模块吗?
- azure - 能否将 Azure 逻辑应用变量输出到文件并存储在 Blob 存储中?
- vue.js - mdb 数据表在 Vue.js 中不呈现数据
- jenkins - 使用 Jenkins 管道仅执行选定的作业
- javascript - Chart.js 只是最后一点
- php - 如何重定向子文件夹中的所有请求
- python - 如何在 Singularity 配方中激活 Anaconda 环境
- android - 使用 androidx NotificationManagerCompat 无法解析符号“来自”