本文均从网上摘录
线程池
重复地创建销毁线程会过度消耗资源,线程池可以让线程进行复用。当有工作来,就会从线程池拿一个线程,当工作完成后,并不是直接关闭线程,而是将这个线程归还给线程池供其他任务使用。
线程池能有效的处理多个线程的并发问题,避免大量的线程因为互相强占系统资源导致阻塞现象,能够有效的降低频繁创建和销毁线程对性能所带来的开销。
线程池的组成部分
1、线程池管理器(ThreadPoolManager):用于创建并管理线程池。
2、工作线程(WorkThread): 线程池中线程。
3、任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。
4、任务队列(workQueue):用于存放没有处理的任务。提供一种缓冲机制。
四种常见的线程池
Executors.newCacheThreadPool():可缓存线程池,只有非核心线程。先查看池中有没有以前建立的线程,如果有,就直接使用。如果没有,就建一个新的线程加入池中,缓存型池子通常用于执行一些生存期很短的异步型任务。
Executors.newFixedThreadPool(int n):创建一个可重用固定个数的线程池,以共享的无界队列方式来运行这些线程。
Executors.newScheduledThreadPool(int n):是唯一一个有延迟执行和周期重复执行的线程池。它的核心线程池固定,非核心线程的数量没有限制,但是闲置时会立即会被回收。
Executors.newSingleThreadExecutor():创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。