浅谈线程池

一、线程池的概念

线程池做的工作主要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建和启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等待,等其他线程执行完毕,再从队列中取出任务来执行。

二、主要特点:

线程复用,控制最大并发数,管理线程

1)降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗。

2)提高响应速度。当任务到达时,任务可以不需要等到线程的创建就能执行。

3)提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。

三、线程池用到的类

Java 中的线程池是通过 Executor 框架实现的,该框架中用到 Executor,Executors,ExecutorService,ThreadPoolExecutor这几个类。

重点:

Executors.newFixedThreadPool(int)//一池固定线程数

Executors.new SingleThreadExecutor()//一池一线程

Executors.newThreadPool()//一池多线程

四、线程池的几个重点参数

public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler)

1.corePoolSize(今日当值):线程池中的核心线程数。在创建了线程池之后,当有请求任务来,就会安排池中的线程去执行请求任务,近似理解为今日当值线程。当线程池中的线程数目达到corePoolSize之后,就会把到达的任务放在缓存队列中。

2.maximumPoolSize(最多有多少个线程):线程池能够容纳同时执行的最大线程数,此值必须大于等于1。

3.keepAliveTime(超过corePoolSize的其他线程的空闲存活时间):多余的空闲线程的存活时间,当前线程池数量超过corePoolSize时,当空闲时间达到keepAliveTime时,多余空闲线程会被销毁直到只剩下corePoolSize个线程为止。

4.unit:keepAliveTime的单位。

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

6.threadFactory:表示生成线程池中工作线程的线程工厂,用于创建线程一般用默认的即可。

7.handler:拒绝策略,表示当队列满了并且工作线程大于等于线程池的最大线程数量.

五、线程池的底层原理:

1.在创建了线程池之后,等待提交过来的任务请求。

2.当调用 execute() 方法添加一个请求任务时,线程池会做如下判断:

    2.1如果正在运行的线程数量小于 corePoolSize,那么马上创建线程运行这个任务。

    2.2如果正在运行的线程数量大于 corePoolSize,那么将这个任务放入队列。

    2.3如果这个时候队列满了,且正在运行的线程数小于maximumPoolSize,那么要创建非核心线程运行任务。

    2.4如果这个时候队列满了,且正在运行的线程数大于等于maximumPoolSize,那么线程池会启动饱和拒绝策略执行。

3.当一个线程完成任务时,它会从队列中取下一个任务来执行。

4.当一个线程无事可做超过一定的时间(keepAliveTime)时,线程池会判断:如果当前运行的线程数大于 corePoolSize,那么这个线程就会被停掉。所以线程池的所有任务完成后它最终会收缩到corePoolSize大小。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值