线程池的优点
①重用线程池中的线程,避免因为线程的创建和销毁所带来的性能开销;
②能有效控制线程池的最大并发数,避免大量的线程之间因互相抢占系统资源而导致的堵塞的现象;
③能够有效对线程进行简单的管理,并提供定时执行以及指定间隔循环执行等功能;
线程池的流程
线程池分为四个
①FixedThreadPool
线程数量固定的线程池,当线程处于空闲状态时,它们并不会被回收,除非线程池被关闭了。从参数我们可以看出,FixedThreadPool只有核心线程并且核心线程没有超时机制,另外任务队列大小也是没有限制的。由于只有核心线程且不会被回收,所以可以很快响应外界的请求。
②CachedThreadPool
CachedThreadPool只有非核心线程,最大线程数非常大,所有线程都活动时,会为新任务创建新线程,否则利用空闲线程(60s空闲时间,过了就会被回收,所以线程池中有0个线程的可能)处理任务。任务队列SynchronousQueue相当于一个空集合,导致任何任务都会被立即执行。适合执行大量耗时较少的任务。
③ScheduleThreadPool
ScheduleThreadPool核心线程数固定,非核心线程数没有限制,当非核心线程闲置时会立即被回收。
ScheduleThreadPool这类线程主要用于执行定时任务和具有固定周期的重复任务。
④SingleThreadExecutor
SingleThreadExecutor只有一个核心线程,确保所有任务都在同一线程中按顺序完成。因此不需要处理线程同步的问题。