@Override
        public void lockInterruptibly() throws InterruptedException {
            final long start = System.nanoTime();
            final Thread owner = this.parent.getOwner();
            try {
                this.delegate.lockInterruptibly();
            } finally {
                final long elapsed = System.nanoTime() - start;
                if (elapsed > this.maxBlockingNanos) {
                    report(this.mode, owner, this.parent.getQueuedThreads(), elapsed);
                }
            }
        }
A {@link ReadWriteLock} that can report some info when the lock is held by a thread very long time.

@author jiachun.fjc
jraft-core/src/main/java/com/alipay/sofa/jraft/util/concurrent/LongHeldDetectingReadWriteLock.java