面经-并发-线程池核心参数
示意图:
1.核心线程数:最多保留的线程数(可以为0)
2.最大线程数:核心线程+救急线程
3.workQuene:阻塞队列,对任务起到缓冲作用。还未进行的线程不会直接成为救急线程,而是先存在任务队列中,等核心线程空闲下来后,会被获取执行。(上限控制)
4.救急队列:当核心线程都在运行,任务队列也都放满了,再添加新任务则会添加救急线程。不会保留在线程池中,而是有一定的生存时间。
5.生存时间keepAliveTime;时间单位unit。如果在这个时间范围内没有线程需要执行,则会从线程池把它去掉
6.拒绝策略:核心线程和任务队列满了,救急线程也超过了最大线程数上限,如果还有新任务创建,则采用handler拒绝策略。
7.线程工厂:为线程对象起个好名字。
拒绝策略:
任务队列:先进先出
任务进入后,如果有核心线程则进入核心线程执行;
如果核心线程满了则进入任务队列等待;
当救急线程也忙时,触发拒绝策略:
1.抛异常 AbortPolicy() (默认):线程池资源耗尽时直接抛异常,无法执行新任务。
2.调用者执行 CallerRunsPolicy():由调用者执行超出的任务。
3.丢弃新 DiscardPolicy():丢弃新任务,不报异常和错误。
4.丢弃老 DiscardOldestPolicy():把最早加入队列的任务丢弃掉,再把新任务加入任务队列中。