线程池的作用及原理

1.什么是线程池?

顾名思义,存放线程的池子,类比我们学过的数据库连接池

2.线程池的作用:

   1)降低系统的资源的消耗

   2)提高响应速度

   3)提高线程的可管理性

2.线程池的七大参数:

   1)int corePoolSize:核心线程数,

   2)int maximumPoolSize:最大线程数

   3)long keepAliveTime:空闲线程的存活时间

   4)TimeUnit unit:空闲时间的存活时间的单位

   5)BlockingQueue<Runnable> workQueue:任务缓存的阻塞队列(相当于候客厅)

   6)ThreadFactory threadFactory:创建线程的线程工厂

   7)RejectedExecutionHandler handler:任务拒绝策略

   

2.1)拒绝策略是干什么的?

当线程池中的线程数达到最大线程数,且阻塞队列已满,就会采用拒绝策略

4种拒绝策略:

         1) AbortPolicy:丢弃任务并抛出RejectedExecutionException异常,默认策略

         2) CallerRunsPolicy相对而言它就比较完善了,当有新任务提交后,如果线程池没被关                  闭且没有能力执行,则把这个任务交于提交任务的线程执行,也就是谁提交任务,谁就                  负责执行任务

         3) DiscardPolicy:丢弃任务,但是不抛出异常;

         4)DiscardOldestPolicy:丢弃阻塞队列最老的任务,然后重新尝试执行任务(重复此过程)

 3.线程池的原理:

当有请求任务提交过来,首先判断线程池中核心线程池是否都在执行任务,如果没有,则开一个新的线程来出来任务,如果核心线程池满了,则将提交过来的任务放到阻塞队列,阻塞队列已满就会开一些新的线程(非核心线程)来处理阻塞队列里面的任务,当阻塞队列满了,并且线程数已经达到了最大的线程数,这时候会采用拒绝策略,一段时间后,当线程空闲时,会根据keepAliveTime 来回收核心线程数 corePoolSize 之外的线程,同时若设置了 allowCoreThreadTimeOut 值为 true,也会对核心线程进行回收

        


                
线程池是一种常见的并发编程技术,用于管理和复用线程。它主要用于提高多线程程序的性能和资源利用率,以及控制并发线程的数量。 线程池作用: 1. 降低线程创建和销毁的开销:线程的创建和销毁是一项开销较高的操作,线程池可以重用已存在的线程,避免频繁地创建和销毁线程,从而减少了开销。 2. 提高系统的并发性能:线程池可以根据系统资源和负载情况自动调整线程数量,合理分配系统资源,提高并发处理能力。 3. 控制并发线程数量:通过设置线程池的参数,可以限制同时执行的任务数量,避免系统资源被过度占用而导致系统崩溃或响应变慢。 线程池的实现原理: 1. 线程池管理器:线程池由一个线程池管理器负责创建、初始化和维护线程池。它负责监控线程池中的线程数量、任务队列和线程状态等。 2. 任务队列:线程池通常使用队列来保存待执行的任务。当有新的任务提交到线程池时,先将任务放入任务队列中,然后由空闲的线程从队列中取出任务并执行。 3. 线程池大小:线程池的大小可以根据系统资源和负载情况进行动态调整。一般来说,线程池的大小应根据系统的CPU核心数、内存大小和任务的性质来设定。 4. 线程工厂:线程池使用线程工厂来创建新的线程。线程工厂负责创建线程,并可以设置线程的名称、优先级和其他属性。 5. 拒绝策略:当任务队列已满并且线程池中的线程数量达到上限时,新提交的任务可能会被拒绝执行。这时可以使用一种拒绝策略来处理这些被拒绝的任务,如抛出异常、丢弃任务或等待一段时间再尝试提交等。 总之,线程池通过维护一组可重用的线程和任务队列,提供了一种高效的并发编程方式。它能够优化系统资源的使用,提高程序的性能和可伸缩性,并且可以通过合理配置参数来控制并发线程的数量,从而更好地适应不同的应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值