线程池 - ThreadPoolExecutor

继承了AbstractExecutorService(抽象类)

  该抽象类实现了ExecutorService 接口

  该接口又继承于Executor接口 

      Executor接口只有一个方法void execute(Runnable command);

   Executor是一个顶层接口,其唯一的方法用来执行runnable任务;

   ExecutorService接口继承于Executor,并声明了一些submit,invokeAll,invokeAny及shutdown方法。主要是负责线程的一些操作。

   AbstractExecutorService基本实现了executorService中的方法, 线程池又继承了aes。

 

核心参数:

   corePoolSize: 核心池大小,默认情况下线程不会超过核心大小。

   maximumPoolSize: 最大线程数, 当达到一定负载时,线程数会超过核心数,但始终小于最大线程数. 当负载较轻会回收线程至核心池数量

   keepAliveTime: 表示线程没有任务执行时,的存活时间. 默认情况,当线程数大于核心小于最大数量时才会启用;  如果调用allowCoreThreadTimeOut(boolean)方法,线程数下界为0

   unit:keepAliveTime的时间单位

   workQueue: 阻塞队列,用来存储等待执行的任务。 一般很少使用abq和pbq,多用lbq和synchronousQueue.队列.  

         abq: arrayBlockingQueue队列,基于数组的先进先出,创建时必须指定大小

         pbq: PriorityBlockingQueue 优先级队列

         lbq: linkedBlockingQueue,基于链表的队列,默认长度为Integer.MAX_VALUE

         synchronousQueue: 不保存任务,直接创建新线程

   threadFactory:线程工厂

   handler: 对拒绝任务的处理策略,四种参数. abortPolicy(丢弃任务并抛异常),discardPolicy(丢弃任务不抛异常),DiscardOldestPolicy(丢弃最前面的任务),callerRunsPolicy(交由调用线程处理)

 

运行时参数:

   workers: 工作集

   allowCoreThreadTimeOut: 是否允许核心线程设置存活时间

   poolSize: 线程池中当前线程数

   largestPoolSize: 记录曾经出现过的最大线程数

   completedTaskCount: 记录已经执行完的任务数

 

线程池的四种状态:

    running : 0 创建线程池后

    shutdown : 1 调用了shutdown()方法,此时线程池无法接受新任务

    stop : 2 调用shutdownNow()方法,无法接受新任务并尝试终止现有任务

    terminated : 3 所有工作线程销毁并且任务缓冲队列清空后的状态

 

常见线程池:

// 实际采用的linkedBlockingQueue,缓存队列,threadNum既是核心线程数也是最大线程数。
ExecutorService pool = Executors.newFixedThreadPool(threadNum);
// 可缓存线程池,实际采用synchronousQueue队列,最大线程数为Integer.MAX_VALUE
ExecutorService pool = Executors.newCachedThreadPool();
// 单线程线程池,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值