在Java中,假设如果我使用如下所示的循环启动1000个线程,有没有办法可以监视实际运行的线程数以及线程与任务管理器一起消耗的CPU资源?
for(int j=0; j<=1000; j++)
{
MyThread mt = new MyThread ();
mt.start ();
}
答案 0 :(得分:2)
您可以使用VisualVM
或JConsole
或任何其他监控工具
答案 1 :(得分:2)
如果您的意思是Windows任务管理器,那么您可以自定义进程选项卡中显示的列:
Menu View > Select Columns > Threads
修改强>
快速测试表明,创建一个额外的线程确实会将该计数器递增1 - 当该线程终止时,计数器会递减。
但它从多个线程开始,因为它可能也包含各种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);
}
答案 2 :(得分:1)
在代码中,您可以使用Thread.activeCount()方法
答案 3 :(得分:1)
我认为Visual VM是一个更好的工具。如果下载并安装所有插件,您将获得线程和更多信息。
答案 4 :(得分:0)
您可以为此perpers(MXBean)使用托管bean。例如ThreadMXBean。
要获得MXBean,请致电
ManagementFactory.getThreadMXBean()
getThreadCount()和getCurrentThreadCpuTime()方法可以帮助你。
答案 5 :(得分:0)