一、线程池简介
1.线程池状态
1)Running:运行中
2)ShuttingDown:关闭中
3)Termitnaed:已关闭
2.线程池是进程级的重量级资源。生命周期默认和JVM一致。
3.线程池优缺点
1)降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
2)提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
3)提高线程的可管理性。
二、线程池的接口
1.executor:void execute(Runnable) 启动线程任务。线程池顶级接口。唯一方法:execute()
调用者提供runnable接口的实现,线程池通过线程执行这个runnable。
2.executorService
void execute(Runnable)、Future submit(Callable)、Future submit(Runnable)。
3.Future:线程执行结束后的结果。
get():获取结果
4.Callable:可执行接口。有返回值和异常。
5.Executors
工具类型,为Executor线程池提供工具方法。可以快速提供几种线程池。
开始:创建线程池
结束:jvm关闭或调用shutdown并处理完所有任务。
三、四种线程池
1.FixedThreadPool:容量固定的线程池。推荐
1)BlockingQueue<Runnable>:任务队列。
当任务数量大于线程池容量时,没有运行的任务保存在任务队列中。
当有空闲线程时,自动从任务队列取出任务执行。
2)queued.tasks:任务队列。
completed.tasks:结束任务队列。计数
2.CachedThreadPool:缓存线程池。
1)自动扩容。
2)默认线程空闲60s自动销毁。
应用场景:内部或测试应用。
3.ScheduledThreadPool:计划任务线程池。
1)根据计划自动执行任务的线程池。定时完成任务。
2)阻塞式。
应用场景:计划任务时选用(DelaydQueue)。
4.SingleThreadExecutor:单一容量的线程池。
应用场景:保证任务顺序时选用。游戏中的喇叭,秒杀。