java线程池

Source

线程池

线程池考点:三大方法、7大参数、4种拒绝策略

池化技术:事先准备好资源,有人要用就来我这拿,用完之后还给我

默认大小:2

max

线程池的好处:

1、降低资源消耗

2、提高响应效率

3、方便管理线程

线程服用、可以控制并发数

理解:(线程池有核心线程数、最大线程数、和阻塞队列构成)

            1、当线程需求小于核心线程数+阻塞队列大小时,只会有核心线程开

            2、当线程需求介于最大线程数+阻塞队列大小时,会逐步开启所有线程

            3、当线程需求大于最大线程数+阻塞队列大小时,会执行拒绝策略

   线程安排优先级:核心线程数>阻塞队列>最大线程数

三大方法:

七大参数:

1.corePoolSize:线程池中的常驻核心线程数
2.maxinumPoolSize:线程池中能够容纳同时执行的最大线程数,此值必须大于等于一
3.keepAliveTime:多余的空闲线程的存活时间。
当前线程池数量超过corePoolSize时,当空闲时间达到keepAliveTime时,多余空闲线程会被销毁直到只剩下corePoolSize个线程为止。
4.unit:keepAliveTime的单位
5.workQueue:任务队列,被提交但是尚未被执行的任务。
6.threadFactory:表示生成线程池中工作线程的线程工厂,用于创建线程一般用默认的即可。
7.handler:拒绝策略,表示当队列满了并且工作线程-大于等于线程池的数量最大线程数(maxinumPoolSize)时如何来拒绝请求执行的runnable的策略。

所以一般实际运用中药用源码的方式去自定义线程池 

 

四种拒绝策略

 

 

最大线程数如何设置?

分为CPU密集型和IO密集型

CPU密集型:设置CPU核数为最大线程数

IO密集型:程序有15个大型任务,IO特别占用资源,一般设置为大型任务数的二倍