@Override
    public RLock readLock() {
        return new RedissonReadLock(commandExecutor, getName());
    }
@Test
    public void testUnlockFail() {
        Assertions.assertThrows(IllegalMonitorStateException.class, () -> {
            RReadWriteLock rwlock = redisson.getReadWriteLock("lock");
            Thread t = new Thread() {
                public void run() {
                    RReadWriteLock rwlock = redisson.getReadWriteLock("lock");
                    rwlock.readLock().lock();
                };
            };

            t.start();
            t.join();

            RLock lock = rwlock.readLock();
            try {
                lock.unlock();
            } finally {
                // clear scheduler
                lock.forceUnlock();
            }
        });
    }