生成deamon线程的executor

mac2022-06-30  16

参考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;     }

转载于:https://www.cnblogs.com/cuizhf/archive/2011/12/25/2301143.html

最新回复(0)