线程池:ThreadPoolExecutor 原理

关于线程池:ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler);

1.当线程数小于核心线程数(corePoolSize)时,创建线程;

2.当线程数大于核心线程数,且任务队列未满时,将任务放入任务队列Queue;

3.当线程数大于核心线程数,且任务队列已满,则分两组情况:

     <1>.若线程数小于最大线程数(maximumPoolSize),则创建线程;

      <2>.若线程数等于最大线程数,则根据策略处理任务(抛出异常、拒绝任务、主线程执行)。

 

参数:

1.corePoolSize:核心线程数,内的线程执行完成后不会销毁线程,进入缓存队列等待再次被运行;

2.maximumPoolSize: 最大线程数;

3.keepAliveTime:非核心线程能够空闲的最大时间,超过时间,线程终止;unit:时间单位;

4.workQueue: 缓存队列,存放等待被执行的任务;

5.threadFactory: 线程工程,用了创建线程,一般有3中策略:ArrayBloackingQueue||LinkedBlockingQueue||SynchronousQueue;

5.handler:拒绝处理策略,线程梳理大于最大线程数就会采用拒绝处理策略:

ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出异常;

                                 DiscardPolicy:只丢弃任务;

                                 DiscardOldestPolicy:丢弃队列最前面的任务,再重新尝试执行任务;

                                 CallerRunsPolicy:由调用线程处理该任务。

ThreadPoolExecutor关闭线程池方法:shutdown,submit;后者有返回结果。

线程数状态:RUNNING、SHUTDOWN、stop、terminated;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值