中国到底有多少个程序员?
7.3 常见线程池 罗列几种常见的线程池创建方式。 1.Executors.newFixedThreadPool 定长的线程池,有核心线程,核心线程的即为最大的线程数量,没有非核心线程。 使用的无界的等待队列是LinkedBlockingQueue。使用时候小心堵满等待队列。 2.Executors.newSingleThreadExecutor 创建单个线程数的线程池,它可以保证先进先出的执行顺序 3.Executors.newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 4.Executors.newScheduledThreadPool 创建一个定长的线程池,而且支持定时的以及周期性的任务执行,支持定时及周期性任务执行 5.ThreadPoolExecutor 最原始跟常见的创建线程池的方式,它包含了 7 个参数、4种拒绝策略 可用。
7.4 线程池核心点 面的这个流程几乎就跟JDK线程池的大致流程类似,其中7大参数:
当线程池的任务缓存队列已满并且线程池中的线程数目达到maximumPoolSize,如果还有任务到来就会采取任务拒绝策略,一般有四大拒绝策略:
7.2 正确创建方式 使用Executors创建线程池可能会导致OOM。原因在于线程池中的BlockingQueue主要有两种实现,分别是ArrayBlockingQueue 和 LinkedBlockingQueue。
|