@Override
    public RLock readLock() {
        return new RedissonReadLock(commandExecutor, getName());
    }
@Test
    public void testName() throws InterruptedException, ExecutionException, TimeoutException {
        ExecutorService service = Executors.newFixedThreadPool(10);
        RReadWriteLock rwlock = redisson.getReadWriteLock("{test}:abc:key");
        RLock rlock = rwlock.readLock();

        List<Callable<Void>> callables = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
          callables.add(() -> {
            for (int j = 0; j < 10; j++) {
              rlock.lock();
              try {
              } finally {
                rlock.unlock();
              }
            }
            return null;
          });
        }

        List<Future<Void>> futures = service.invokeAll(callables);
        for (Future<Void> future : futures) {
            assertThatCode(future::get).doesNotThrowAnyException();
        }

        service.shutdown();
        assertThat(service.awaitTermination(1, TimeUnit.MINUTES)).isTrue();
    }