获取线程池中任务执行数量
Posted 服务端技术杂谈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取线程池中任务执行数量相关的知识,希望对你有一定的参考价值。
通过线程池进行任务处理,有时我们需要知道线程池中任务的执行状态。
通过ThreadPoolExecutor的相关API实时获取线程数量,排队任务数量,执行完成线程数量等信息。
实例
private static ExecutorService es = new ThreadPoolExecutor(50, 100, 0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>(100000));public static void main(String[] args) throws Exception
{for (int i = 0; i < 100000; i++) {
es.execute(() -> {
System.out.print(1); try{
Thread.sleep(1000);
}
catch(InterruptedException e) {
e.printStackTrace();
}
});
}
ThreadPoolExecutor tpe = ((ThreadPoolExecutor) es);while (true) {
System.out.println(); int queueSize = tpe.getQueue().size();
System.out.println("当前排队线程数:"+ queueSize); int activeCount = tpe.getActiveCount();
System.out.println("当前活动线程数:"+ activeCount);
long completedTaskCount = tpe.getCompletedTaskCount();
System.out.println("执行完成线程数:"+ completedTaskCount);
long taskCount = tpe.getTaskCount();
System.out.println("总线程数:"+ taskCount);
Thread.sleep(3000);
}
}
比如我们每隔3秒获取一次执行状态信息,总共有50个工作线程。
第一次输出:
当前排队线程数:
99950
当前活动线程数:
50
执行完成线程数:
0
总线程数(排队线程数 + 活动线程数 + 执行完成线程数):
100000
第二次输出:
当前排队线程数:
99800
当前活动线程数:
50
执行完成线程数:
150
总线程数(排队线程数 + 活动线程数 + 执行完成线程数):
100000
说明通过API可以获取不断变化的线程及线程任务数量了。
以上是关于获取线程池中任务执行数量的主要内容,如果未能解决你的问题,请参考以下文章