/** Extended write unlocking. * @see extWriteLock() */ public synchronized final void extWriteUnlock() { if (Thread.currentThread() != getCurrentWriter()) { throw new RuntimeException(WRITE_LOCK_MISSING); } if (writeDepth == 0) { // most outer locking block assert decrementThreadLocalLockDepth(); super.writeUnlock(); } else { // just inner locking block writeDepth--; } }
/** Runs the runnable under read lock. */ public void render(Runnable r) { readLock(); assert incrementThreadLocalLockDepth(); try { r.run(); } finally { assert decrementThreadLocalLockDepth(); readUnlock(); } }