Java线程压力测试

Nab*_*egh 3 java concurrency multithreading

我试图对我可以在单个JVM上运行的最大并发线程数以及创建大量线程所需的时间进行小测试.我有以下简单的代码

public class Threading {

  public static void main(String[] args) {
    Runnable task = new Runnable() {
        @Override
        public void run() {
            for (int i = 0; i < 100000; i++)
                ;
        }
    };

    long start = System.nanoTime();
    int runs = 1000000;
    for (int i = 0; i < runs; i++)
        new Thread(task).start();

    long time = System.nanoTime() - start;
     System.out.printf("Time for task to complete: %.2f seconds", (double) time / 1000000000.0);
 }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用VisualVM来跟踪活动线程的数量.

我得到的结果似乎很奇怪.我达到的峰值活动线程大约为100,活动线程的平均数量大约为15,并且创建100万个线程需要60多秒.

VisualVM截图

我在这里做错了吗?

JB *_*zet 5

在没有做任何其他事情的情况下从0到100000的计数是如此之快(甚至可能被Hotspot完全删除,将run()方法减少到noop),你将永远不会有大量的并发线程:它需要更多的时间来开始一个新的线程比线程完成和死亡所需的线程.

为什么不让你的所有线程永远睡觉?这将保证他们全部开始.