如何监控线程池

741 阅读1分钟

这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战

线程池的好处

  • 降低资源消耗。重复利用已创建的线程降低线程创建和销毁造成的消耗。
  • 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
  • 提高线程的可管理性。线程是稀缺资源,如果频繁创建,会消耗系统资源,降低系统稳定性,使用线程池统一分配、调优和监控。

如何监控线程池

用一个 printStats 方法实现了最简陋的监控,每秒输出一次线程池的基本内部信息:

getPoolSize():获取线程池的线程数量。如果线程池不销毁的话,线程池里的线程不会自动销毁。

getActiveCount():获取活跃的线程数。

getCompletedTaskCount():获取线程池再运行过程中已完成的任务数量。

getQueue().size():获取队列中还有多少积压任务。

private void printStats(ThreadPoolExecutor threadPool) {
   Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(() -> {
        log.info("=========================");
        log.info("Pool Size: {}", threadPool.getPoolSize());
        log.info("Active Threads: {}", threadPool.getActiveCount());
        log.info("Number of Tasks Completed: {}", threadPool.getCompletedTaskCount());
        log.info("Number of Tasks in Queue: {}", threadPool.getQueue().size());

        log.info("=========================");
    }, 0, 1, TimeUnit.SECONDS);
}

作者简介:悟空,8年一线互联网开发和架构经验,用故事讲解分布式、架构设计、Java 核心技术。《JVM性能优化实战》专栏作者,开源了《Spring Cloud 实战 PassJava》项目,自主开发了一个 PMP 刷题小程序。
公众号:悟空聊架构
本文已收录至 www.passjava.cn