多线程之常用线程池有哪些?

182 阅读2分钟

这是我参与8月更文挑战的第18天,活动详情查看: 8月更文挑战

在实际项目中,线程是很宝贵的资源,所以在程序频繁执行创建新线程、销毁线程这些操作,势必会对服务器资源造成一个浪费。

所以,这里就要用线程池来进行对线程的管理了,线程池可以很好的管理线程的创建、销毁这些操作,将服务器资源的浪费控制在一个小的范围内。

那么目前有哪些常用的线程池呢?下面来看一下吧。

ExecutorService线程池接口

ExecutorService继承了Java中的Executor接口,ExecutorService的实现类有多种,分别应对不同场景下的线程池使用。每一种线程池的实现都有自己的特殊性,共有四种实现方案。

1.newCachedThreadPool

特征:可缓存。

此线程池可在程序需要线程时,优先分配给程序空闲的、未回收的旧线程,在一定程度上避免频繁的创建线程、销毁线程。

利用缓存概念解决这个问题,显然更加高效。

2.newFixedThreadPool

特征:可设置固定数量线程

此线程池控制了该线程池中需要的线程数量,变相控制了程序的并发数量,因为线程数量限制,如果超出线程池设置的线程数量,则需要等待其他线程空闲之后才能使用。

3.newScheduleThreadPool

特征:支持定时及周期执行任务。

此线程池最大的特点就是支持定时和周期执行任务,可以在某些特殊场景下处理一些情况。

4.newSingleThreadExecutor

特征:单线程化。

指定唯一的工作线程来执行程序任务,在这个线程池死亡后,或者程序执行异常,线程池会重新创建一个线程来替代原来的线程进行执行之后的任务。

因为是单一工作线程来执行任务,所以会约定好一个执行顺序,其的执行顺序会遵循先进先出的原则,或者指定程序任务的优先级来控制执行顺序。