Java线程池"Executors"

本篇文章介绍线程池工厂类Executors, 但是实际开发中已经不允许使用该类去创建线程池, 可参考"阿里Java开发规范"的说明:


image.png

Executors的几种创建线程池的方法:

1. 创建一个单线程的线程池

public static ExecutorService newSingleThreadExecutor(){}
特点:
1.单线程的线程池是按照FIFO顺序执行的
2.线程池中唯一的线程存活时间是无限的
3.当池中的线程忙碌时新提交的线程会进入内部的阻塞队列中,并且阻塞队列是无界的无界队列有可能使服务器资源耗尽

关闭线程池

public void shutdown(): 调用后线程池状态为SHUTDOWN,不能在添加新的任务,否则抛出异常RejectedExecutionException. 等待原池中任务执行完线程池才会退出.
public List shutdownNow(): 线程池状态立即变为STOP,并且停止所有正在执行的线程. 在阻塞队列中的任务会被返回.

2. 创建固定数量的线程池

public static ExecutorService newSingleThreadExecutor(int threads)

3. 创建可缓存的线程池

Executors.newCachedThreadPool()
特点:
1.线程池没有大小限制,受限于操作系统或JVM参数控制.
2.池中空闲线程超过60秒就会被回收.
弊端:
1.线程池没有最大数量限制,有资源耗尽风险

4.可调度线程池

一个可以提供"延迟"和"周期性"任务调度功能的线程池ScheduledExecutorServic.

创建方法

public void newSingleThreadScheduledExecutor(): 创建一个可调度线程池, 池中仅含有一个线程
public void newSingleThreadScheduledExecutor(int corePoolSize): 创建一个可调度线程池,池中线程数由参数控制

你可能感兴趣的:(Java线程池"Executors")