美文网首页
Java线程池

Java线程池

作者: 愿你我皆是黑马 | 来源:发表于2021-06-29 23:34 被阅读0次

为什么要用线程池

  • 复用线程,节省创建和销毁线程的消耗
  • 控制并发数量,并发量过多会导致大量的时间花费在线程切换上
  • 对线程做统一的管理

线程池的继承结构

线程池的顶层接口是Executor接口,ThreadPoolExecutor是一个实现类。
继承结构图如下:


ThreadPoolExecutor构造方法:
  1. 5参构造:
    int corePoolSize, //线程池中核心线程数的最大值
    int maximumPoolSize, //线程总数(核心+非核心)的最大值
    long keepAliveTime, //非核心线程的闲置超时销毁时间,如果设置了allowCoreThreadTimeOut(true)也会作用核心线程
    TimeUnit unit, //上一个变量keepAliveTime的时间单位
    BlockingQueue<Runnable> workQueue //阻塞队列,维护等待执行的Runnable任务对象队列
  2. 6参构造:
    int corePoolSize,
    int maximumPoolSize,
    long keepAliveTime,
    TimeUnit unit,
    BlockingQueue<Runnable> workQueue,
    ThreadFactory threadFactory //
  3. 6参构造:
    int corePoolSize,
    int maximumPoolSize,
    long keepAliveTime,
    TimeUnit unit,
    BlockingQueue<Runnable> workQueue,
    RejectedExecutionHandler handler
  4. 7参构造:
    int corePoolSize,
    int maximumPoolSize,
    long keepAliveTime,
    TimeUnit unit,
    BlockingQueue<Runnable> workQueue,
    ThreadFactory threadFactory,
    RejectedExecutionHandler handler

核心线程:

线程池有两类线程,核心线程和非核心线程。核心线程会一直存在线程池中。即使这个线程什么也不干。非核心线程长时间闲置会被销毁。但是如果设置了allowCoreThreadTimeOut(true)核心线程也会超时销毁。


阻塞队列BlockingQueue<Runnable> workQueue:

常用的阻塞队列有如下几类:

  1. LinkedBlockingQueue:
  2. ArrayBlockingQueue:
  3. SynchronousQueue:
  4. DelayQueue:

创建线程工厂ThreadFactory threadFactory:


拒绝处理策略厂RejectedExecutionHandler handler

常用的4中拒绝处理策略:

  1. ThreadPoolExecutor.AbortPolicy:默认拒绝处理策略,丢弃任务并且

相关文章

网友评论

      本文标题:Java线程池

      本文链接:https://www.haomeiwen.com/subject/lydlultx.html