【Java】线程池梳理
前言
线程池:本质上是一种对象池,用于管理线程资源。在任务执行前,需要从线程池中拿出线程来执行。在任务执行完成之后,需要把线程放回线程池。通过线程的这种反复利用机制,可以有效地避免直接创建线程所带来的坏处。
优点:1、降低资源的消耗。线程本身是一种资源,创建和销毁线程会有CPU开销;创建的线程也会占用一定的内存;2、提高任务执行的响应速度。任务执行时,可以不必等到线程创建完之后再执行;3、提高线程的可管理性。线程不能无限制地创建,需要进行统一的分配、调优和监控。
缺点:1、频繁的线程创建和销毁会占用更多的CPU和内存;2、频繁的线程创建和销毁会对GC产生比较大的压力;3、线程太多,线程切换带来的开销将不可忽视;4、线程太少,多核CPU得不到充分利用,是一种浪费。
流程
- 判断核心线程池是否已满,如果不是,则创建线程执行任务;
- 如果核心线程池满了,判断队列是否满了,如果队列没满,将任务放在队列中;
- 如果队列满了,则判断线程池是否已满,如果没满,创建线程执行任务;
- 如果线程池也满了,则按照拒绝策略对任务进行处理。
方式
入门级例子
package