线程池的总结

一、线程池的参数介绍

我们学到线程池时 看到线程池中的七个构造方法可能有些不太了解,下面让我来说一下这七个构造方法都是什么作用

1.corePoolSize 

表示的是线程池核心线程大小    核心线程就是即使当前处于空闲状态 但是他们也不会被销毁

2.maximumPoolSize   表示线程池最大线程数量 

3.keepAliveTime 表示空闲线程存活时间

4.unit 表示空闲线程存活时间单位

5.workQueue 表示工作队列

工作队列的类型有 ArrayBlockingQueue(基于数组实现)        LinkedBlockingQuene(基于链表实现)

                         SynchronousQuene(不缓存任务)       PriorityBlockingQueue(基于优先级队列实现)

6.threadFactory 表示线程工厂

7.handler 表示拒绝策略

拒接策略一共有四种  1.AbortPolicy        直接丢弃任务并抛出异常

                                   2.CallerRunsPolicy       让添加的线程自己完成这个任务

                                   3.DiscardPolicy        丢弃最新的任务

                                   4.DiscardOldestPolicy 丢弃最老的任务

二、线程池的工作流程

  1. 在创建了线程池后,等待提交过来的任务请求
  2. 当调用execute()方法添加一个请求任务时,线程池会做出如下判断
    1. 如果正在运行的线程池数量小于corePoolSize,那么马上创建线程运行这个任务
    2. 如果正在运行的线程数量大于或等于corePoolSize,那么将这个任务放入队列
    3. 如果这时候队列满了,并且正在运行的线程数量还小于maximumPoolSize,那么还是创建非核心线程like运行这个任务;
    4. 如果队列满了并且正在运行的线程数量大于或等于maximumPoolSize,那么线程池会启动饱和拒绝策略来执行
  3. 当一个线程完成任务时,它会从队列中取下一个任务来执行
  4. 当一个线程无事可做操作一定的时间(keepAliveTime)时,线程池会判断:
    1. 如果当前运行的线程数大于corePoolSize,那么这个线程就被停掉
    2. 所以线程池的所有任务完成后,它会最终收缩到corePoolSize的大小

三、使用Executors 创建常见的线程池

1.newCachedThreadPool :创建一个可缓存线程池
2.newFixedThreadPool:创建一个固定大小的线程池
3.newScheduledThreadPool : 创建一个定时线程池
4.newSingleThreadExecutor :创建一个单线程化的线程池

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值