gpt4 book ai didi

java - ReentrantLock#tryLock(long,TimeUnit) 在尝试获取锁时在做什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:52:11 25 4
gpt4 key购买 nike

ReentrantLock#tryLock(long,TimeUnit) 实现在尝试获取锁时在做什么?假设线程 A 实际上拥有 myLock 的锁,线程 B 调用 myLock.tryLock(10,SECONDS),线程 B 是在 hibernate 还是在等待?

换句话说,是这两个实现的区别:

1.

while (true)
try {
if (readLock.tryLock())
return;
MILLISECONDS.sleep(5);
}catch (InterruptedException e) {}

2.

 while (true)
try {
if (readLock.tryLock(5,MILLISECONDS))
return;
}catch (InterruptedException e) {}

最佳答案

首先,如果锁被释放,第二个将等待不到 5 毫秒,因为它不需要等待从 sleep 中唤醒。因此,它较少受到饥饿问题的影响。

然后,j.u.c.l 包使用 LockSupport#park 方法暂停线程,而不是 Thread.sleep。据我了解,它对线程调度程序产生了影响,park 允许较低的延迟,但不确定 sleep 的具体实现方式。

此外,您的代码没有任何意义,完全相同的效果可以通过 lock() 方法实现。

关于java - ReentrantLock#tryLock(long,TimeUnit) 在尝试获取锁时在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8398371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com