ribbon源码中线程是的使用

源码类:PollingServerListUpdater

使用单例模式(静态内部类),初始化线程池


   //使用静态内部类初始化线程池
    private static class LazyHolder {
        private final static String CORE_THREAD = "DynamicServerListLoadBalancer.ThreadPoolSize";
        private final static DynamicIntProperty poolSizeProp = new DynamicIntProperty(CORE_THREAD, 2);
        private static Thread _shutdownThread;

        static ScheduledThreadPoolExecutor _serverListRefreshExecutor = null;

        static {
            int coreSize = poolSizeProp.get();
            ThreadFactory factory = (new ThreadFactoryBuilder())
                    .setNameFormat("PollingServerListUpdater-%d")
                    .setDaemon(true)
                    .build();
            //创建线程池
            _serverListRefreshExecutor = new ScheduledThreadPoolExecutor(coreSize, factory);
            poolSizeProp.addCallback(new Runnable() {
                @Override
                public void run() {
                    _serverListRefreshExecutor.setCorePoolSize(poolSizeProp.get());
                }

            });
            _shutdownThread = new Thread(new Runnable() {
                public void run() {
                    logger.info("Shutting down the Executor Pool for PollingServerListUpdater");
                    //关闭线程池
                    shutdownExecutorPool();
                }
            });
            //虚拟机关闭钩子方法
            Runtime.getRuntime().addShutdownHook(_shutdownThread);
        }

        private static void shutdownExecutorPool() {
            if (_serverListRefreshExecutor != null) {
                 //关闭线程池
                _serverListRefreshExecutor.shutdown();

                if (_shutdownThread != null) {
                    try {
                      //关闭线程
                        Runtime.getRuntime().removeShutdownHook(_shutdownThread);
                    } catch (IllegalStateException ise) { // NOPMD
                        // this can happen if we're in the middle of a real
                        // shutdown,
                        // and that's 'ok'
                    }
                }

            }
        }
    }
   
    //获取线程池实例
    private static ScheduledThreadPoolExecutor getRefreshExecutor() {
         return LazyHolder._serverListRefreshExecutor;
    }

你可能感兴趣的:(Spring-cloud,ribbon)