zoukankan      html  css  js  c++  java
  • 线程池创建与拒绝策略

    线程池的拒绝策略

    四种策略 默认是AbortPolicy

    threadPoolExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy()); 设置线程拒绝策略

    名称意义
    AbortPolicy (默认)当任务添加到线程池中被拒绝时,它将抛出 RejectedExecutionException 异常。
    CallerRunsPolicy当任务添加到线程池中被拒绝时,会在线程池当前正在运行的Thread线程池中处理被拒绝的任务。
    DiscardOldestPolicy当任务添加到线程池中被拒绝时,线程池会放弃等待队列中最旧的未处理任务,然后将被拒绝的任务添加到等待队列中
    DiscardPolicy当任务添加到线程池中被拒绝时,线程池将丢弃被拒绝的任务。

    Java中提供的几种方法创建线程池

    1. newFixedThreadPool

    通过创建一个corePoolSize和maximumPoolSize相同的线程池。使用LinkedBlockingQuene作为阻塞队列,不过当线程池没有可执行任务时,也不会释放线程。

    2. newCachedThreadPool

    1. 初始化一个可以缓存线程的线程池,默认缓存60s,线程池的线程数可达到Integer.MAX_VALUE,即2147483647,内部使用SynchronousQueue作为阻塞队列;
    2. 和newFixedThreadPool创建的线程池不同,newCachedThreadPool在没有任务执行时,
      当线程的空闲时间超过keepAliveTime,会自动释放线程资源,当提交新任务时,如果没有空闲线程,则创建新线程执行任务,会导致一定的系统开销;

    3. newSingleThreadExecutor

    初始化的线程池中只有一个线程,如果该线程异常结束,会重新创建一个新的线程继续执行任务,唯一的线程可以保证所提交任务的顺序执行,内部使用LinkedBlockingQueue作为阻塞队列。

    4. newScheduledThreadPool

    初始化的线程池可以在指定的时间内周期性的执行所提交的任务,在实际的业务场景中可以使用该线程池定期的同步数据。除了newScheduledThreadPool的内部实现特殊一点之外,其它几个线程池都是基于ThreadPoolExecutor类实现的.

  • 相关阅读:
    java集合--使用集合应该关注的方面
    Linux环境Java多版本管理与切换
    java集合--LinkedList源码
    Java集合--ArrayList源码
    数据库规范化(范式)
    Java异常
    Java内部类
    Java抽象类和接口
    JavaScript 语句
    Vue.js简介
  • 原文地址:https://www.cnblogs.com/idcode/p/14551406.html
Copyright © 2011-2022 走看看