zoukankan      html  css  js  c++  java
  • 生成deamon线程的executor

    参考SwingWorker代码:

       /**
         * returns workersExecutorService.
         *
         * returns the service stored in the appContext or creates it if
         * necessary.
         *
         * @return ExecutorService for the {@code SwingWorkers}
         */
        private static synchronized ExecutorService getWorkersExecutorService() {
            final AppContext appContext = AppContext.getAppContext();
            ExecutorService executorService =
                (ExecutorService) appContext.get(SwingWorker.class);
            if (executorService == null) {
                //this creates daemon threads.
                ThreadFactory threadFactory =
                    new ThreadFactory() {
                        final ThreadFactory defaultFactory =
                            Executors.defaultThreadFactory();
                        public Thread newThread(final Runnable r) {
                            Thread thread =
                                defaultFactory.newThread(r);
                            thread.setName("SwingWorker-"
                                + thread.getName());
                            thread.setDaemon(true);
                            return thread;
                        }
                    };

                executorService =
                    new ThreadPoolExecutor(MAX_WORKER_THREADS, MAX_WORKER_THREADS,
                                           10L, TimeUnit.MINUTES,
                                           new LinkedBlockingQueue<Runnable>(),
                                           threadFactory);
                appContext.put(SwingWorker.class, executorService);

                // Don't use ShutdownHook here as it's not enough. We should track
                // AppContext disposal instead of JVM shutdown, see 6799345 for details
                final ExecutorService es = executorService;
                appContext.addPropertyChangeListener(AppContext.DISPOSED_PROPERTY_NAME,
                    new PropertyChangeListener() {
                        @Override
                        public void propertyChange(PropertyChangeEvent pce) {
                            boolean disposed = (Boolean)pce.getNewValue();
                            if (disposed) {
                                final WeakReference<ExecutorService> executorServiceRef =
                                    new WeakReference<ExecutorService>(es);
                                final ExecutorService executorService =
                                    executorServiceRef.get();
                                if (executorService != null) {
                                    AccessController.doPrivileged(
                                        new PrivilegedAction<Void>() {
                                            public Void run() {
                                                executorService.shutdown();
                                                return null;
                                            }
                                        }
                                    );
                                }
                            }
                        }
                    }
                );
            }
            return executorService;
        }
    ——————————————————————————————————
    傲轩游戏网
  • 相关阅读:
    .NetCore 3.1和.NetCore 5.0 中WebApi的请求参数的验证方法
    php 使脚本持续的运行
    Elasticsearch es三种分页方式和对比
    es 大批量写入提高性能的策略
    php 使用多进程批量插入数据
    【转】EM算法MATLAB代码及详细注解
    【转】详解EM算法与混合高斯模型(Gaussian mixture model, GMM)
    【转】高斯混合模型
    【转】二维高斯分布(Two-dimensional Gaussian distribution)的参数分析
    word使用dot模板以spring word 模板为例
  • 原文地址:https://www.cnblogs.com/cuizhf/p/2301143.html
Copyright © 2011-2022 走看看