Executors源码解读

2018-12-12  本文已影响0人  Fooisart

在谈到线程池时,时常会出现 Executors 的身影。那么它到底是个神马东东,跟线程池又有神马关系,本文结合jdk1.8源码一探究竟。


突然想提个问题,如果没有 Executors ,线程池是不是就玩不转了?
闲言少叙,直奔主题。
进入Executors,类注释的第一句话是真么写的,

Factory and utility methods for Executor...

没贴全,但已经可以明天它的意义。哦,原来它注释一个工具,为诸如Executor等服务的。那么下面我们继续看,这个工具到底能干什么。


查看Executors中的方法,如下图:


Executors.png

我们发现,其中有大量类似于 new * ThreadPool命名方式的方法。这些方法的命名告诉我们,原来Executors是一个用来创建线程池的工具。

Tips:很多面试官会问候选人,您都用过哪些线程池?其实就是在考察Executors类。

简单看一下线程池(ThreadPoolExecutor)中各个参数的意义:

ThreadPoolExecutor.png
public static ExecutorService newFixedThreadPool(int nThreads) {
        return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>());
    }
public static ExecutorService newSingleThreadExecutor() {
        return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue<Runnable>()));
    }
public static ExecutorService newCachedThreadPool() {
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>());
    }
大概就介绍这么多了,其他创建线程池的方式,不是很常用。

As always and let me know what you think, leave the comments below. Bye :)

上一篇 下一篇

猜你喜欢

热点阅读