https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html
ThreadPoolExecutor类提供了一些方法来获取这些数据,比如:
getCorePoolSize()getMaximumPoolSize()getQueue(),可以通过它获取队列长度、元素个数等信息getPoolSize(),包括核心线程和非核心线程getActiveCount(),也就是正在执行任务的线程getLargestPoolSize(),也就是线程池曾经到过的最大值getTaskCount(),包括历史已完成和正在执行的任务除了这些方法,ThreadPoolExecutor类还有一些钩子方法,它们没有具体的实现,但是我们可以重写它们来获取更多的数据,比如:
beforeExecute:在Worker线程执行任务之前会调用的方法,我们可以在这里记录任务开始执行的时间afterExecute:在Worker线程执行任务之后会调用的方法,我们可以在这里计算任务执行的耗时,并根据耗时计算最大耗时、最小耗时、平均耗时等terminated:当线程池从状态变更到TERMINATED状态之前调用的方法,我们可以在这里做一些清理或者统计工作