前言
本文只会介绍一下Java中的原生线程池及相关的工具类:ThreadPoolExecutor
、ScheduledThreadPoolExecutor
、Executors
ThreadPoolExecutor
ThreadPoolExecutor
是Java
原生提供的线程池执行类。
ThreadPoolExecutor
构造方法中的参数用途:
corePoolSize
:线程池的核心线程数,这些线程默认不会被销毁。但是初始化线程池的时候可能线程池中的线程数小于核心线程数。maximumPoolSize
:线程池最大线程数。最大线程数必须不小于核心线程数。keepAliveTime
:默认情况下,非核心线程的存活时间(空闲线程等待任务最大时间)。如果调用allowsCoreThreadTimeOut()
方法设置为允许核心线程超时,则核心线程在等待超过keepAliveTime
的时间也会被销毁。unit
:keepAliveTime
的时间单位。workQueue
:阻塞的工作队列,用于存放未被处理的任务。threadFactory
:用于创建线程的线程工厂。handler
:超过最大线程数和工作队列长度时的处理策略。
ScheduledThreadPoolExecutor
ScheduledThreadPoolExecutor
是ThreadPoolExecutor
的子类。这个类和ScheduledThreadPoolExecutor
不同的是,它可以延迟一定时间执行任务或者定期执行任务,但是不保证执行时间。
Executors
线程池相关的工具类,提供四种实用的线程池构建方法:
newSingleThreadExecutor
:创建只有一个工作线程的线程池。该线程池是一个核心线程数和最大线程数为1
的线程池,线程池内有一个无限长度的等待队列(LinkedBlockingQueue
)。newFixedThreadPool
:创建固定线程数的线程池。该线程池是一个核心线程数和最大线程数相等的线程池,线程池内有一个无限长度的等待队列(LinkedBlockingQueue
)。newCachedThreadPool
:创建工作线程可重用的线程池。该线程池是一个核心线程数为0
,最大线程数为整形最大值的线程池,工作线程失效时间为1分钟,线程池内有一个无限长度的等待队列(SynchronousQueue
)。newScheduledThreadPool
:创建延迟执行或者是定时执行任务的线程池。其实就是调用了ScheduledThreadPoolExecutor
的构造方法。