tryLock()
可能无法获取锁。因此,如果我们使用返回值来执行工作,我们可能根本无法完成工作。
Lock lock = new ReentrantLock();
boolean isLocked = lock.tryLock();
if (isLocked) {
try {
doWork();
} finally {
lock.unlock();
}
}
Run Code Online (Sandbox Code Playgroud)
Asynchronized
会阻塞直到获得锁,所以我们知道doWork()
最终会完成。
那么,我们应该tryLock()
在循环内直到获得锁是正确的吗?
boolean isLocked = false;
while (!isLocked) {
isLocked = lock.tryLock();
Thread.sleep(100);
}
if (isLocked) {
try {
doWork();
} finally {
lock.unlock();
}
}
Run Code Online (Sandbox Code Playgroud)