Chr*_*iss 8 java concurrency multithreading java.util.concurrent
什么是ReentrantLock#tryLock(long,TimeUnit)实现在尝试获取锁时执行的操作?假设线程A实际上拥有Lock of myLock
和Thread B调用myLock.tryLock(10,SECONDS)
,是线程B正在休眠还是在等待?
换句话说,这是两个实现的区别:
1.
while (true)
try {
if (readLock.tryLock())
return;
MILLISECONDS.sleep(5);
}catch (InterruptedException e) {}
Run Code Online (Sandbox Code Playgroud)
2.
while (true)
try {
if (readLock.tryLock(5,MILLISECONDS))
return;
}catch (InterruptedException e) {}
Run Code Online (Sandbox Code Playgroud)
首先,如果锁被释放,第二个将等待不到 5 毫秒,因为它不需要等待从sleep
. 因此,它较少面临饥饿问题。
然后,j.u.c.l
包使用 LockSupport#park 方法来暂停线程,而不是Thread.sleep
. 据我了解,它对线程调度程序有影响,它park
允许较低的延迟,但不确定它sleep
是如何实现的。
另外,您的代码没有任何意义,通过方法可以达到完全相同的效果lock()
。
归档时间: |
|
查看次数: |
6408 次 |
最近记录: |