java中的几种线程池

Executor顶层接口。

ExecutorService继承Executor接口。

AbstractExecutorService抽象类,继承ExecutorService接口。

ThreadPoolExecutor 线程池和ForkJoinPool两者都继承AbstractExecutorService抽象类。

Executors线程池工厂,所有的工厂方法中线程池创建都是使用此类封装。此类不可实例化。

ScheduledExecutorService 继承ExecutorService接口

 

ScheduledThreadPoolExecutor继承ThreadPoolExecutor类,实现ScheduledExecutorService接口

Executors中的几种线程池

  • public static ExecutorService newFixedThreadPool(int nThreads);创建一个固定大小的、可重用的线程池。任务队列使用的是LinkedBlockingQueue
  • public static ExecutorService newWorkStealingPool(int parallelism);此种线程池为JDK8才引入的,与其他线程池不同的是,此方法返回的是一个ForkJoinPool类型的线程池它创建一个带并行级别的线程池,如不传并行级别参数,默认为当前系统的CPU个数。
  • public static ExecutorService newSingleThreadExecutor();创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。任务队列使用的是LinkedBlockingQueue
  • public static ExecutorService newCachedThreadPool();创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。任务队列使用的是SynchronousQueue
  • public static ScheduledExecutorService newSingleThreadScheduledExecutor();底层是ScheduledThreadPoolExecutor,线程池大小固定为1,它在ExecutorService的基础上扩展了在给定时间执行某任务的功能,任务队列使用的是DelayedWorkQueue
  • public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize);底层也是ScheduledThreadPoolExecutor,线程池大小可以指定。任务队列使用的是DelayedWorkQueue

猜你喜欢

转载自www.cnblogs.com/huster-huwentao/p/10490706.html