线程池-ThreadPoolExecutor

野性酷女 2022-12-12 04:52 485阅读 0赞

以下为构造线程池实例的构造方法:

20201006131137786.png

  1. corePoolSize:核心线程数量
  2. maximumPoolSize:线程最大线程数
  3. workQueue:阻塞队列,存储等待执行的任务,很重要,会对线程池运行过程产生重大影响
  4. keepAliveTime:线程没有任务执行时最多保持多久时间终止
  5. threadFactory:线程工厂,用来创建线程
  6. rejectHandler:当拒绝处理任务时的策略

unit:参数keepAliveTime的时间单位,有7种取值,在TimeUnit类中有7种静态属性:

  1. TimeUnit.DAYS; //天
  2. TimeUnit.HOURS; //小时
  3. TimeUnit.MINUTES; //分钟
  4. TimeUnit.SECONDS; //秒
  5. TimeUnit.MILLISECONDS; //毫秒
  6. TimeUnit.MICROSECONDS; //微妙
  7. TimeUnit.NANOSECONDS; //纳秒

线程池中的几个常用方法:

execute():提交任务,交给线程池执行

submit():提交任务,能够返回执行结果 execute+Future

shutdown():关闭线程池,等待任务都执行完

shutdownNow():关闭线程池,不等待任务执行完

getTaskCount():线程池已执行和未执行的任务总数

getCompletedTaskCount():已完成的任务数量

getPoolSize():线程池当前的线程数量

getActiveCount():当前线程池正在执行任务的线程数量

扩展:可根据以上四个get方法做一个图形化的界面,实现线程监控,每隔一分钟刷新一次

线程池-Executor框架接口:

  1. // 创建一个可缓存线程池
  2. ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
  3. // 创建一个可重用固定个数的线程池
  4. ExecutorService fixedThreadPool = Executors.newFixedThreadPool(2);
  5. //创建一个定长线程池,支持定时及周期性任务执行
  6. ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
  7. //创建一个单线程化的线程池
  8. ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();

线程池:合理配置

CPU密集型任务,就需要尽量压榨CPU,参考值可以设为CPU的数量+1

IO密集型任务,参考值可以设置为CPU数量的2倍

发表评论

表情:
评论列表 (有 0 条评论,485人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java线ThreadPoolExecutor

    为什么使用线程池 如果每次使用线程都创建,每次创建和销毁的开销会很大,线程池主要用来解决线程生命周期开销问题和资源不足问题,也消除了线程创建所带来的延迟。 线