@Override
    public RLock readLock() {
        return new RedissonReadLock(commandExecutor, getName());
    }
@Test
    public void testReadLockExpirationRenewal() throws InterruptedException {
        int threadCount = 50;

        ExecutorService executorService = Executors.newFixedThreadPool(threadCount/5);

        AtomicInteger exceptions = new AtomicInteger();
        for (int i=0; i<threadCount; i++) {
            executorService.submit(()-> {
                try {
                    RReadWriteLock rw1 = redisson.getReadWriteLock("mytestlock");
                    RLock readLock = rw1.readLock();
                    readLock.lock();
                    try {
                        Thread.sleep(redisson.getConfig().getLockWatchdogTimeout() + 5000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    readLock.unlock();
                } catch (Exception e) {
                    exceptions.incrementAndGet();
                    e.printStackTrace();
                }
            });
        }

        executorService.shutdown();
        assertThat(executorService.awaitTermination(180, TimeUnit.SECONDS)).isTrue();
        assertThat(exceptions.get()).isZero();
    }