Java five kinds of test time required singleton

public class Test {

    public static void main(String[] args) {

    long start=System.currentTimeMillis();

    for(int i=0;i<10;i++) {   //main方法里启动10个线程,每个线程调动是十万次
        new Thread(new Runnable() {
            public void run()
            {
                for(int i=0;i<100000;i++)
                {
                    Object o=Design.getInstance();
                }
            }

        }).start();
    }

    long end=System.currentTimeMillis();
    System.out.println("总耗时:"+(end-start));//算的是main线程结束的时间,可能main线程结束时,其他线程还在运行
}

The correct way to calculate the time:

public class Test {

public static void main(String[] args) {
    long start=System.currentTimeMillis();
    int threadnum=10;
    final CountDownLatch countDownLacth =new CountDownLatch(threadnum);

for(int i=0;i<10;i++) {   //main方法里启动10个线程,每个线程调动是十万次
    new Thread(new Runnable() {
        public void run()
        {
            for(int i=0;i<100000;i++)
            {
                Object o=Design.getInstance();
            }
            countDownLatch.countDown();  //计数器减一,会报错,因为内部类不能使用外部类的局部变量,所以外部类局部变量要加上final变成常量
        }

    }).start();
}

countDownLatch.await();// 让main线程等待其他线程执行完,内部其实是一个循环,等待计数器减为0
long end=System.currentTimeMillis();
System.out.println("总耗时:"+(end-start));
    }
}

Guess you like

Origin blog.51cto.com/14437184/2440147