这是使用ReentrantLock.isHeldByCurrentThread的正确方法吗?

时间:2018-08-21 17:57:22

标签: java android reentrantlock

我需要从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();
       } 
    }
 }

0 个答案:

没有答案