在 Java 中,假设如果我使用如下循环启动 1000 个线程,有什么方法可以监控实际运行的线程数以及线程使用任务管理器消耗的 CPU 资源?
for(int j=0; j<=1000; j++)
{
MyThread mt = new MyThread ();
mt.start ();
}
在 Java 中,假设如果我使用如下循环启动 1000 个线程,有什么方法可以监控实际运行的线程数以及线程使用任务管理器消耗的 CPU 资源?
for(int j=0; j<=1000; j++)
{
MyThread mt = new MyThread ();
mt.start ();
}
您可以使用VisualVM
orJConsole
或任何其他监控工具
如果您指的是 Windows 任务管理器,那么可以,您可以自定义进程选项卡中显示的列:
Menu View > Select Columns > Threads
编辑
一个快速测试表明,创建一个额外的线程确实会将该计数器增加一 - 当该线程终止时,计数器会递减。
但它从不止一个线程开始,因为它可能也包括各种 JVM 线程(它从 19 个线程开始)。请注意,jconsole 在单线程程序中也显示了 10 个线程。
如果您使用可视化 VM,您可以看到守护线程和非守护线程之间的分离(所有 JVM 线程都是守护线程)。
测试代码:
public static void main(String[] args) throws InterruptedException {
Thread.sleep(3000);
Runnable r = new Runnable() {
@Override
public void run() {
try {
Thread.sleep(10000);
} catch (InterruptedException ex) {}
}
};
for (int i = 0; i < 5; i++) {
new Thread(r).start();
Thread.sleep(1000);
}
Thread.sleep(10000);
}
在代码中,您可以使用Thread.activeCount()方法
我认为Visual VM是一个更好的工具。如果您下载并安装所有插件,您将获得线程和更多信息。
您可以为此 perpers (MXBean) 使用托管 bean。例如 ThreadMXBean。
要获取 MXBean,只需调用
ManagementFactory.getThreadMXBean()
getThreadCount() 和 getCurrentThreadCpuTime() 方法将帮助您。