线程池核心参数
1.corePoolSize:线程池中核心线程的个数。
2.maximumPoolSize:线程池中线程的总数。(线程总数=核心线程数 + 救急线程数)
3. keepAliveTime:救急线程的存活时间。(救急线程空闲时的存活时间。)
4.unit:存活时间的单位。
5.BlockingQueue:阻塞线程,存储哪些没有被核心线程执行的任务。
6.ThreadFactory:线程工厂,用于创建线程。
7.RejectExecutionHandler:拒绝策略。(当任务在队列中放不下后,执行的策略)
拒绝策略
AbortPolicy:直接抛出异常。(默认策略)
CallRunsPolicy:直接调用主线程执行对应的任务。
DiscardOldestPolicy:丢掉在堵塞队列中存储最久的任务,将新的任务存储到队列中。
DiscardPolicy:直接丢弃任务。
执行原理
1.在新的任务进来后,先判断核心线程是否已满,如果没满,直接创建个核心线程去执行任务。
2.如果核心线程满了,就判断阻塞队列是否已满,如果没有满,直接存储到阻塞队列中。
3.如果阻塞队列满了,就判断线程的总数是否大于核心线程的总数,如果大于,创建救急线程去执行任务。(当救急线程和核心线程处于空闲的时候就会去执行堵塞队列中的方法)
4.如果小于,就去执行对应的拒绝策略。(默认直接报错)