J.U.C 系列 Tools之Executors
上个章节说了Tools中的其他四个工具类,本节我们来看一看工具类中的老大Executors,为什么说它是老大,肯定是因为他的功能最多最强大。
一 Executors是什么
Executors 是一个线程池管理类,Executors为Executor,ExecutorService,ScheduledExecutorService,ThreadFactory和Callable类提供了一些工具方法。Executors可以用于方便的创建线程池。
这里面的Executor,ExecutorService,ScheduledExecutorService,ThreadFactory,Callable,ThreadPoolExecutor等我会放到下一章节来讲解,本节我们就只是了解Executors是什么,能做什么。
Executors是个工具类,它提供对Executor、ExecutorService、ScheduledExecutorService、ThreadFactory 和 Callable 类的一些实用方法。
此类支持以下各种方法:
* 创建并返回设置有常用配置的ExecutorService的方法。
* 创建并返回设置有常用配置的ScheduledExecutorService 的方法。
* 创建并返回“包装的”ExecutorService 方法,它使特定于实现的方法不可访问,只让ExecutorService接口的方法可用。
* 创建并返回 ThreadFactory 的方法,它可将新创建的线程设置为已知的状态。
* 创建并返回非闭包形式的 Callable 的方法,这样可将其用于需要 Callable 的执行方法中。
下面重点来了:
newXXX() | 描述 | 参数与返回值 | 源码 | 适用场景 |
public static ExecutorService newFixedThreadPool (int nThreads);
|
创建一个可重用固定线程数的线程池, 以共享的无界队列方式来运行这些线程 |
参数:n 池中的线程数 抛出:如果 nThreads <= 0. IllegalArgumentException 如果 threadFactory 为 null NullPointerException -
|
public static ExecutorService
|
适用于为了满足 资源管理的需求, 二需要限制当前线程 数量的应用场景, 适用于负载比较重 的服务器 |
public static ExecutorService newSingleThreadExecutor(); |
创建一个使用单个 worker 线程的 Executor,以无界队列方式来运 行该线程。 可保证顺序地执行 各个任务,并且在任意给定的 时间不会有多个线程是活动的。 |
返回:新创建的单线程 Executor |
public static ExecutorService |
适用于需要保证 顺序的执行各个任务, 并且在任意时间 点不会有多个 线程活动的应用场景 |
public static ExecutorService newCachedThreadPool(); public static ExecutorService newCachedThreadPool (ThreadFactory f);
|
创建一个可根据需要创建新线程的 线程池,但是在以前构造的线程可 用时将重用它们,并在需要时使用 提供的 ThreadFactory创建新线程。 |
参数:threadFactory - 创建新线程时使用的工厂 如果 threadFactory 为 null |
public static ExecutorService newCachedThreadPool(){ return new ThreadPoolExecutor(0, Integer. MAX_VALUE,60L, TimeUnit.SECONDS, new SynchronousQueue<Runnable>()); } |
大小无界的线程池, 适用执行很多短期 异步任务的小程序 或者负载较轻的服务器 |
public static ScheduledExecutorService newSingleThread- ScheduledExecutor(); |
创建一个单线程执行程序, 它可安排在给定延迟后运行 命令或者定期地执行。 |
返回:新创建的安排执行程序 |
public static ScheduledExecutorService |
适用于多个后台线程执行周期任务 |