jdk中Executors类提供的几种线程池

jdk中Executors类提供了5种已经定义好的线程池,分别为以ThreadPoolExecutor为基础的基本线程池FixedThreadPool,SingleThreadExecutor,CachedThreadPool。以ScheduledThreadPoolExecutor为基础的定时线程池SingleThreadScheduledExecutor,ScheduledThreadPool。要搞懂这几个线程池只需要搞懂ThreadPoolExecutor和ScheduledThreadPoolExecutor就可以了。

至于为何这样说根据构造方法就可以发现:

package ThreadPoolExecutor.jdkDefined;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;

public class AllJdkExecutorServiceDemo {

    public static void main(String[] args) {
        // FinalizableDelegatedExecutorService(可终止授权类)是一个包装类,其继承DelegatedExecutorService类。重写了protected void finalize()方法直接调用shutdown方法来确保线程池在垃圾回收时先执行关闭
        // DelegatedExecutorService(授权类)是一个包装类。其仅公开了ExecutorService接口中的方法。并且这些方法的实际调用均是直接调用构造入参的ExecutorService对应的方法
        // 也就是说:FinalizableDelegatedExecutorService类只向外暴露ExecutorService接口中的方法,且这些方法的执行都交由入参封装对象的执行
        // 这是一种实现非配置型的方案(剔除原始方法之外的附加配置型方法)
        
        
        
        /**----------------FixedThreadPool-----------------*/
        ExecutorService eService = Executors.newFixedThreadPool(1);// 固定线程量的线程池
        /**return new ThreadPoolExecutor(nThreads, nThreads,
            0L, TimeUnit.MILLISECONDS,
            new LinkedBlockingQueue<Runnable>());*/
        
        eService = Executors.newFixedThreadPool(2, Executors.defaultThreadFactory());
        /**public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory) {
            return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>(),
                                      threadFactory);*/
        // 根据构造可知其实一个核心线程和最大线程数都是入参的ThreadPoolExecutor
        
        

        /**----------------SingleThreadExecutor-----------------*/
        eService = Executors.newSingleThreadExecutor();//
        /**
         * public static ExecutorService newSingleThreadExecutor() {
            return new FinalizableDelegatedExecutorService
                (new ThreadPoolExecutor(1, 1,
                                        0L, TimeUnit.MILLISECONDS,
                                        new LinkedBlockingQueue<Runnable>()));
            }
         */
        eService = Executors.newSingleThreadExecutor(Executors.defaultThreadFactory());
        /**
         * return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue<Runnable>(),
                                    threadFactory));
         */
        // newSingleThreadExecutor是一个只具有ExecutorService中方法,核心线程和最大线程数均为1的ThreadPoolExecutor线程池。
        
        

        /**----------------CachedThreadPool-----------------*/
        eService = Executors.newCachedThreadPool();//
        /**
         * return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
            60L, TimeUnit.SECONDS,
            new SynchronousQueue<Runnable>());
         */
        eService = Executors.newCachedThreadPool(Executors.defaultThreadFactory());
        /**
            return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                    60L, TimeUnit.SECONDS,
                    new SynchronousQueue<Runnable>());
        */
        // 可以看到这个同样是ThreadPoolExecutor来实现,核心线程为0,最大线程量为Integer.MAX_VALUE,临时线程保存60s,
        // 且队列是一个无空间队列,这意味着一但有新任务来就会交给线程执行。
        // 如有有空闲的临时线程就用空闲的临时线程,如果没有就创建新的临时线程.临时线程空闲超过60s即被销毁
        
        

        /**----------------SingleThreadScheduledExecutor-----------------*/
        ScheduledExecutorService eService2 = Executors.newSingleThreadScheduledExecutor();//
        /**
         * return new DelegatedScheduledExecutorService
            (new ScheduledThreadPoolExecutor(1));
         */
        eService2 = Executors.newSingleThreadScheduledExecutor(Executors.defaultThreadFactory());
        /**
         * return new DelegatedScheduledExecutorService
         *  (new ScheduledThreadPoolExecutor(1, threadFactory));
         */
        // 一个只具有单线程,且具有定时功能的线程池
        
        

        /**----------------ScheduledThreadPool-----------------*/
        eService2 = Executors.newScheduledThreadPool(1);
        /**
         * return new ScheduledThreadPoolExecutor(corePoolSize);
         */
        eService2 = Executors.newScheduledThreadPool(1, Executors.defaultThreadFactory());
        /**
         * new ScheduledThreadPoolExecutor(corePoolSize, threadFactory);
         */
        // 具有定时功能的线程池
        

        /**----------------unconfigurable-----------------*/
        eService = Executors.unconfigurableExecutorService(eService);//不可配置线程池
        /**
         * if (executor == null)
            throw new NullPointerException();
                return new DelegatedExecutorService(executor);
         */
        
        eService2 = Executors.unconfigurableScheduledExecutorService(eService2);//不可配置定时线程池
        /**
         * if (executor == null)
            throw new NullPointerException();
                return new DelegatedScheduledExecutorService(executor);
         */
    }
}


发布了29 篇原创文章 · 获赞 11 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/yue_hu/article/details/79915643
今日推荐