什么是线程池?线程池的工作原理和使用线程池的好处?

一个线程池管理了一组工作线程,同时它还包括了一个用于放置等待执行 任务的任务队列(阻塞队列)

默认情况下,在创建了线程池后,线程池中的线程数为 0。当任务提交给线程池之后的处理策略如下

1. 如果此时线程池中的数量小于 corePoolSize(核心池的大小),即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务(也 就是每来一个任务,就要创建一个线程来执行任务)。

2. 如果此时线程池中的数量大于等于 corePoolSize,但是缓冲队列 workQueue 未满,那么任务被放入缓冲队列,则该任务会等待空闲线程将其 取出去执行。

3. 如 果 此 时 线 程 池 中 的 数 量 大于等于 corePoolSize 缓 冲 队 列 workQueue 满,并且线程池中的数量小于 maximumPoolSize(线程池 最大线程数),建新的线程来处理被添加的任务

4. 如果 此时线程池中的数量 大 于 等 于 corePoolSize缓 冲 队列 workQueue 满,并且线程池中的数量等于 maximumPoolSize,那么通 过 RejectedExecutionHandler 所指定的策略(任务拒绝策略)来处理此任务。

也就是处理任务的优先级为:核心线程 corePoolSize、任务队列 workQueue、最大线程 maximumPoolSize,如果三者都满了,使用 handler 处理被拒绝的任务。

5. 特别注意,在 corePoolSize 和 maximumPoolSize 之间的线程 数会被自动释放。当线程池中线程数量大于 corePoolSize 时,如果某线程 空闲时间超过 keepAliveTime,线程将被终止,直至线程池中的线程数目不 大于 corePoolSize。这样,线程池可以动态的调整池中的线程数。

使用线程池的好处:

1.通过重复利用已创建的线程,减少在创建和销毁线程上所花的时间以及系 统资源的开销。

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

3.提高线程的可管理性。使用线程池可以对线程进行统一的分配和监控。

4.如果不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内 存。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
线程池是一种用于管理和复用线程的机制,它可以提高线程的利用率和系统的性能。线程池中包含一组预先创建的线程,这些线程可以被重复使用来执行多个任务。 线程池工作原理如下: 1. 初始化:线程池在启动时会创建一定数量的线程,并将它们放入一个线程池中。 2. 任务提交:当有任务需要执行时,可以将任务提交给线程池。任务可以是一个函数、一个方法或者一个实现了Runnable接口的对象。 3. 任务队列:线程池会维护一个任务队列,用于存储待执行的任务。当有任务提交时,线程池会将任务放入队列中。 4. 线程调度:线程池中的线程会不断地从任务队列中获取任务进行执行。当一个线程完成一个任务后,它会从队列中获取下一个任务并执行,以此类推。 5. 线程复用:线程执行完任务后,并不会立即销毁,而是返回线程池等待下一个任务的到来。这样可以避免频繁地创建和销毁线程,提高了效率。 6. 线程管理:线程池还负责管理线程的数量和状态。当任务较多时,线程池可以动态地创建新的线程;当任务较少时,线程池可以销毁多余的线程,以节省系统资源。 线程池工作原理可以提高系统的性能和资源利用率,避免了频繁地创建和销毁线程的开销。同时,线程池还可以控制并发线程的数量,防止系统资源被过度占用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值