@Override
    public Executor getExecutor(URL url) {
        String name =
                url.getParameter(THREAD_NAME_KEY, (String) url.getAttribute(THREAD_NAME_KEY, DEFAULT_THREAD_NAME));
        int threads = url.getParameter(THREADS_KEY, DEFAULT_THREADS);
        int queues = url.getParameter(QUEUES_KEY, DEFAULT_QUEUES);

        BlockingQueue<Runnable> blockingQueue;

        if (queues == 0) {
            blockingQueue = new SynchronousQueue<>();
        } else if (queues < 0) {
            blockingQueue = new MemorySafeLinkedBlockingQueue<>();
        } else {
            blockingQueue = new LinkedBlockingQueue<>(queues);
        }

        return new ThreadPoolExecutor(
                threads,
                threads,
                0,
                TimeUnit.MILLISECONDS,
                blockingQueue,
                new NamedInternalThreadFactory(name, true),
                new AbortPolicyWithReport(name, url));
    }
@Test
    void getExecutor1() throws Exception {
        URL url = URL.valueOf("dubbo://10.20.130.230:20880/context/path?" + THREAD_NAME_KEY
                + "=demo&" + CORE_THREADS_KEY
                + "=1&" + THREADS_KEY
                + "=2&" + QUEUES_KEY
                + "=0");
        ThreadPool threadPool = new FixedThreadPool();
        ThreadPoolExecutor executor = (ThreadPoolExecutor) threadPool.getExecutor(url);
        assertThat(executor.getCorePoolSize(), is(2));
        assertThat(executor.getMaximumPoolSize(), is(2));
        assertThat(executor.getKeepAliveTime(TimeUnit.MILLISECONDS), is(0L));
        assertThat(executor.getQueue(), Matchers.<BlockingQueue<Runnable>>instanceOf(SynchronousQueue.class));
        assertThat(
                executor.getRejectedExecutionHandler(),
                Matchers.<RejectedExecutionHandler>instanceOf(AbortPolicyWithReport.class));

        final CountDownLatch latch = new CountDownLatch(1);
        executor.execute(new Runnable() {
            @Override
            public void run() {
                Thread thread = Thread.currentThread();
                assertThat(thread, instanceOf(InternalThread.class));
                assertThat(thread.getName(), startsWith("demo"));
                latch.countDown();
            }
        });

        latch.await();
        assertThat(latch.getCount(), is(0L));
    }