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

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)

kan*_*kan 3

首先,如果锁被释放,第二个将等待不到 5 毫秒,因为它不需要等待从sleep. 因此,它较少面临饥饿问题。

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

另外,您的代码没有任何意义,通过方法可以达到完全相同的效果lock()