我需要从ReentrantLock锁中排除Web访问,请参见下面的webAccess()方法。我无法向webAccess()api添加任何参数,因为在现实世界中,我不应该更改它是我们的框架api。要从锁定中排除webAccess,在webAccess()中使用ReentrantLock.isHeldByCurrentThread()方法是否安全?
class X {
ReentrantLock lock = new ReentrantLock();
public mayLock(boolean shouldLock) {
if (shouldLock) {
lock.lock();
}
try {
...
webAccess();
...
} final {
if (shouldLock) {
lock.unlock();
}
}
}
public void webAccess() {
boolean isLockedBySelf = lock.isHeldByCurrentThread();
if (isLockedBySelf) {
lock.unlock();
}
try {
... // web access here
} finally {
if (isLockedBySelf) {
lock.lock();
}
}
}