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;
        }
    ——————————————————————————————————
    傲轩游戏网
  • 相关阅读:
    转-iOS开发系列--地图与定位
    转-关于UIView的autoresizingMask属性的研究
    UIAlertController的使用,代替UIAlertView和UIActionSheet
    设置当前导航栏(navigationController)的标题
    tabBar隐藏方式
    ubuntu 安装qq 及解决安装完搜狗输入法不显示键盘的方法
    python 读写文件
    Ubuntu:如何显示系统托盘图标(systray)
    python tesseract 识别图片中的文字的乱码问题(ubuntu系统下)
    让Ubuntu可以压缩/解压缩RAR文件
  • 原文地址:https://www.cnblogs.com/cuizhf/p/2301143.html
Copyright © 2011-2022 走看看