Juc05_线程池概述、创建方式、七大参数、底层工作原理、拒绝策略(一)

①. ThreadPoolExecutor谈谈你的理解?


  • ①. 为什么使用线程池,优势?


线程池做的工作主要是控制运行的线程的数量,处理过程中将任务加入队列,然后在线程创建

后启动这些任务,如果显示超过了最大数量,超出的数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行.


它的主要特点为:线程复用 | 控制最大并发数 | 管理线程.


②. 线程池如何使用(Java中的线程池是通过Executor框架实现的,该框架中用到了Executor,Executors,ExecutorService,ThreadPoolExecutor这几个类)


Juc05_线程池概述、创建方式、七大参数、底层工作原理、拒绝策略(一)


  • ③. 方法详解与代码实现


三个方法(掌握)

(1).Executors.newFixedThreadPool(int) : 一池定线程


Juc05_线程池概述、创建方式、七大参数、底层工作原理、拒绝策略(一)


(2).Executors.newSingleThreadExecutor( ) : 一池一线程


Juc05_线程池概述、创建方式、七大参数、底层工作原理、拒绝策略(一)


(3).Executors.newCachedThreadPool( ) : 一池N线程


Juc05_线程池概述、创建方式、七大参数、底层工作原理、拒绝策略(一)Juc05_线程池概述、创建方式、七大参数、底层工作原理、拒绝策略(一)


/*
//看cpu的核数
//System.out.println(Runtime.getRuntime().availableProcessors());
* 第四种获取/使用java多线程的方式,线程池
* */
public class ExecutorTest {
    public static void main(String[] args) {

        //ExecutorService threadPool= Executors.newFixedThreadPool(5);//一池5个处理线程
        //ExecutorService threadPool=Executors.newSingleThreadExecutor();//一池一线程
        ExecutorService threadPool=Executors.newCachedThreadPool();//一池N线程

        try {
            for (int i = 1; i <= 10; i++) {
                //使用
                threadPool.execute(() -> {
                    //模拟10个用户来办理业务,每个用户就是一个来自外部的请求线程
                    System.out.println(Thread.currentThread().getName() + "\t 办理业务~!");
                });
                //try { TimeUnit.SECONDS.sleep(3);  } catch (InterruptedException e) {e.printStackTrace();}
            }

        }catch (Exception e){

        }finally {
            //关闭
            threadPool.shutdown();
        }
    }
}


②. 线程池的七大参数


①. corePoolSize:线程池中的常驻核心线程数


在创建了线程池后,当有请求任务来之后,就会安排池中的线程去执行请求任务,近似理解为今日当值线程


当线程池中的线程数目达到corePoolSize后,就会把到达的任务放入到缓存队列当中.


②. maximumPoolSize:线程池能够容纳同时执行的最大线程数,此值大于等于1


③. keepAliveTime:多余的空闲线程存活时间,当空间时间达到keepAliveTime值时,多余的线程会被销毁直到只剩下corePoolSize个线程为止(非核心线程)


④. unit:keepAliveTime的单位


⑤. workQueue:任务队列,被提交但尚未被执行的任务(候客区)


⑥. threadFactory:表示生成线程池中工作线程的线程工厂,用户创建新线程,一般用默认即可(银行网站的logo | 工作人员的制服 | 胸卡等)


⑦. handler:拒绝策略,表示当线程队列满了并且工作线程大于等于线程池的最大显示 数(maxnumPoolSize)时如何来拒绝


Juc05_线程池概述、创建方式、七大参数、底层工作原理、拒绝策略(一)


Juc05_线程池概述、创建方式、七大参数、底层工作原理、拒绝策略(一)


上一篇:BroadcastReceiver广播接收者(六)——粘性广播(StickyBroadcast)使用示例


下一篇:使用CAS、FAA实现无锁编程(下)