个人学习笔记,如有错误请指正~
5.为什么使用线程池,有什么优点?
因为线程池有很多提高效率的优点。
比如说
1.降低资源消耗。它可以重复利用已创建的线程降低线程创建和销毁造成的消耗。
2.提高响应速度,当任务到达时,任务可以不需要等到线程创建就能立即执行
3.提高线程的可管理性。线程如果无限制的创建,不但会消耗系统资源,还会降低系统稳定性。用线程池就能统一分配和监控了。
6.线程池工作原理
工作原理:其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了反复创建线程对象的操作,也就是说避免了消耗过多资源。
详细说的话,就是
1.有很多任务(task)处于一个队列(Queue)状态。
2.线程池容器分配一个线程对象(thread),负责处理线程任务task,此时这个线程处于被占用状态。如果有其他任务进来,线程池容器会分配其他线程对象来处理。
3.一旦处理任务(task)的线程执行任务结束,它就空闲下来了,但是并不会销毁,直到又有新的任务抵达,它又有可能被线程池容器分配去处理任务。
7.线程池重要参数有哪些?
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
1.corePoolSize:线程池核心线程数量
2.maximumPoolSize:线程池最大数量(包含核心线程数量)
3.keepAliveTime:多余的空闲线程存货时间。当前线程数超过corePoolSize时,当空闲时间达到keepAliveTime时多余的空闲线程会被销毁,直到剩到corePoolSize为止。
4.unit:keepAliveTime的单位
5.BlockingQueue workQueue:队列任务,被提交但尚未被执行的任务
6.ThreadFactory threadFactory:表示生成线程池中工作线程的线程工厂,用于创建线程,一般默认就ok
7.RejectedExecutionHandler handler:拒绝策略。当队列满了,工作线程>=线程池的最大线程数
核心线程数满了,阻塞队列也满了,此时就需要扩容,达到线程池最大数后就会触发拒绝策略