ThreadPoolExecutor深入研究

Java封装了ThreadPoolExecutor构造线程池更好地管理多线程,使用线程池有如下两点好处:

       1,使用线程池复用线程避免了创建线程和销毁线程所需的开销

       2,提供了专门的线程池管理,任务管理,并发控制等功能


ThreadPoolExecutor构造器提供了6个入参:

          corePoolSize

          maxPoolSize

          keepAliveTime

          timeUnit

          BlockingQueue

          ThreadFactory


corePoolSize表示线程池中活跃可用的线程数目,即使没有任务运行,线程池中也会保留corePoolSize个活跃线程

maxPoolSize表示线程池中允许运行的最大线程数,该参数会结合blockingQueue来介绍

keepAliveTime表示当线程池中线程数目大于corePoolSize,而没有任务运行来占用这些线程,这些线程存活的时间

timeUnit表示keepAliveTime的单位

BlockingQueue表示新提交的任务没有线程可以用来执行,先将这些任务放入阻塞队列等待执行

ThreadFactory表示创建线程的工程

RejectedExecutionHandler表示线程池不再接受新任务的拒绝策略


BlockingQueue有如下几种:

      1,ArrayBlockingQueue                  有界队列

      2,LinkedBlockingQueue                无界队列

      3,PriorityBlockingQueue               优先队列

      4,SynchronousQueue                   只允许队列中存储一个元素


一,ArrayBlockingQueue

      1,当任务数小于等于corePoolSize,直接放进线程池执行

      2,当任务数大于corePoolSize小于有界队列大小,将没有被执行的任务放入blockingQueue阻塞等待执行

      3,当任务数大于corePoolSize+有界队列大小,新建线程执行,新建的线程数目小于maxPoolSize-corePoolSize

      4,当任务数大于maxPoolSize+有界队列大小,执行拒绝策略


二,LinkedBlockingQueue

     1,当任务数小于等于corePoolSize,直接放进线程池执行

     2,当任务数大于corePoolSize,多出来的 任务直接放入无界队列等待执行

     3,在LinkedBlockingQueue的模式下,maxPoolSize无意义,因为新进来的任务总可以放入无界阻塞队列中

     

三,PriorityBlockingQueue 优先队列




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值