注意:本博客仅用于记录自己的学习日常,不存在与其他用途
为什么需要线程池
1.使用线程池可以重复利用已有的线程继续执行任务,避免线程在创建和销毁时造成消耗
2.由于没有线程创建和销毁时的消耗,可以提高系统响应速度
3.通过线程池可以对线程进行合理的管理,根据系统的承受能力调整运行线程数量的大小
线程池相关的内容:
ThreadPoolExecutor(控制线程数量)
newCachedThreadPool:线程数可以多
newFixedThreadPool:自己设置线程数
newSingleThreadExecutor:单个线程
ScheduledThreadPoolExecutor(控制访问时间)
newScheduledThreadPool:
schedule延迟多久执行、scheduleAtFixedRate控制每多久执行
线程池的生命周期:
运行状态-->过度状态(shutdown/stop --> tidying )-->终止状态
RUNNING:能接受新提交的任务,并且也能处理阻塞队列中的任务。
SHUTDOWN:关闭状态,不再接受新提交的任务,但却可以继续处理阻塞队列中已保存的任务。
STOP:不能接受新任务,也不出列队列中的任务,会中断正在处理任务的
TIDYING:如果所有的任务都已终止了,workerCount(有效呈数)为0,线程池进入该状态后刽周用terminated()方法进入TERMINATED状态。
TERMINATED:在Eterminated()方法执行完后进入该状态,默认terminated()方法中什么也没有做
阻塞队列:
ArrayBlockingQueue
LinkedBlockingQueue
DelayQueue
PriorityBlockingQueue
SynchronousQueue