【发布时间】:2012-01-13 23:08:20
【问题描述】:
ReentrantLock#tryLock(long,TimeUnit) 实现在尝试获取锁时在做什么?假设线程A确实拥有myLock的锁,线程B调用myLock.tryLock(10,SECONDS),线程B是休眠还是等待?
换句话说,就是这两种实现的区别:
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) {}
【问题讨论】:
-
在您的代码 (2) 中,您没有注册要在释放锁时通知的线程,而是尝试轮询它。总体而言,只需 readLock.lock() 代码会更好
标签: java multithreading concurrency java.util.concurrent