public RpcScheduledExecutor(int corePoolSize, final String threadName) {
        super(corePoolSize, new ThreadFactory() {
            private final AtomicLong index = new AtomicLong();
            
            @Override
            public Thread newThread(Runnable r) {
                Thread thread = new Thread(r, threadName + "." + index.getAndIncrement());
                thread.setDaemon(true);
                return thread;
            }
        });
    }
@Test
    void testRpcScheduledExecutor() throws InterruptedException {
        RpcScheduledExecutor executor = new RpcScheduledExecutor(2, NAME);
        CountDownLatch latch = new CountDownLatch(2);
        executor.submit(new TestRunner(1, latch));
        executor.submit(new TestRunner(2, latch));
        boolean await = latch.await(1, TimeUnit.SECONDS);
        assertTrue(await);
        assertEquals(2, threadNameMap.size());
    }