之前线程是用到线程就创建线程 等线程用完了就消掉,这样子做非常的浪费资源
线程池的核心原理:
首先创建一个线程池线程池里面是空的,提交任务的时候会 池子里面会创建新的线程对象 然后当任务执行完毕就会归还给线程池 下次提交的时候就不会再次创建新的线程池 直接会到池子中拿存在的线程就可以了 ,不过如果在提交任务的时候 池子没有空闲的线程 并且还无法创建新的线程,那么此时任务就会排队等待 。
这是自定义线程池:
自定义线程池的流程
根据上图:
1. 当核心线程数量满了 再次提交时就会 到阻塞队列中等待(排队)
2. 当核心线程数量满了 阻塞队列也满了的时候 就会创建临时线程来处理任务的提交
3. 当核心线程数量满了 阻塞队列满了 临时线程处理的任务也满了 那么就会突发拒接策略 就是直接把这个任务丢掉 因为都满了
比如 核心线程数量3个 最大线程数6个(最大线程数不能 小于 核心线程数 必须是大于线程数 最大线程数 <= 核心线程数 6 - 3 = 3 ) 阻塞队列中有3个空位
如果是5个任务 核心线程有3个 处理3个任务 剩下的2个任务就会排到阻塞队列中等待核心线程处理任务完成 才轮到阻塞队列中等待时间最长先提交任务