在实际项目中,线程是很宝贵的资源,所以在程序频繁执行创建新线程、销毁线程这些操作,势必会对服务器资源造成一个浪费。
所以,这里就要用线程池来进行对线程的管理了,线程池可以很好的管理线程的创建、销毁这些操作,将服务器资源的浪费控制在一个小的范围内。
那么目前有哪些常用的线程池呢?下面来看一下吧。
ExecutorService线程池接口
ExecutorService继承了Java中的Executor接口,ExecutorService的实现类有多种,分别应对不同场景下的线程池使用。每一种线程池的实现都有自己的特殊性,共有四种实现方案。
1.newCachedThreadPool
特征:可缓存。
此线程池可在程序需要线程时,优先分配给程序空闲的、未回收的旧线程,在一定程度上避免频繁的创建线程、销毁线程。
利用缓存概念解决这个问题,显然更加高效。
2.newFixedThreadPool
特征:可设置固定数量线程
此线程池控制了该线程池中需要的线程数量,变相控制了程序的并发数量,因为线程数量限制,如果超出线程池设置的线程数量,则需要等待其他线程空闲之后才能使用。
3.newScheduleThreadPool
特征:支持定时及周期执行任务。
此线程池最大的特点就是支持定时和周期执行任务,可以在某些特殊场景下处理一些情况。
4.newSingleThreadExecutor
特征:单线程化。
指定唯一的工作线程来执行程序任务,在这个线程池死亡后,或者程序执行异常,线程池会重新创建一个线程来替代原来的线程进行执行之后的任务。
因为是单一工作线程来执行任务,所以会约定好一个执行顺序,其的执行顺序会遵循先进先出的原则,或者指定程序任务的优先级来控制执行顺序。