c语言怎么获取线程数量?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言怎么获取线程数量?相关的知识,希望对你有一定的参考价值。
参考技术A 以记事本进程为例,在该进程启动的情况下:\\x0d\\x0a\\x0d\\x0a Process[] myProcess = Process.GetProcessesByName("Notepad");//获取该进程\\x0d\\x0a Process p = myProcess[0];\\x0d\\x0a ProcessThreadCollection PTC = p.Threads;//获取其关联的线程,包括主线程\\x0d\\x0a int num = PTC.Count.ToString();//获取线程数量获取线程池中任务执行数量
通过线程池进行任务处理,有时我们需要知道线程池中任务的执行状态。
通过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可以获取不断变化的线程及线程任务数量了。
以上是关于c语言怎么获取线程数量?的主要内容,如果未能解决你的问题,请参考以下文章