2015-12-04 30 views
-1

我想测量我的应用程序的总执行时间。特别是,我的应用程序运行两个线程。我想测量从主开始直到两个线程完成执行的时间(基本上,主要的总执行时间)。我的代码的问题是,看起来好像总执行时间是在两个线程完成执行之前计算的。为了检查这一点,我在MyFirstThread类的run方法的末尾放置了System.out.println(“end first”),并且还将System.out.println(“end second”)放在run方法的末尾MySecondThread类。问题是它打印出总执行时间,之后打印出“结束第一”和“结束第二”。我想要的是首先打印“结束第一”“结束第二”(反之亦然),最后打印总执行时间。 这里我的代码:如何用线程度量总执行时间Java

public static void main(String [] args) throws InterruptedException{ 

    long startTime = System.nanoTime(); 

    MyFirstThread first = new MyFirstThread(); 
    MySecondThread second = new MySecondThread(outputPath); 

    new Thread(first).start(); 
    first.semaphore.acquire(); 
    new Thread(second).start(); 

    long totalTime = System.nanoTime() - startTime; 
    System.out.println("Total time: " + totalTime);  

} 
+2

在记录总时间之前,请保持对线程的引用并加入它们。 –

+0

这就是线程的要点 - 它们以* parallel *方式运行,彼此独立。所以在启动它们之后,当线程仍在运行时,您会到达下一行。 @DavidSchwartz写道,你可以使用'join',但你应该明白它的作用。 – RealSkeptic

回答

0

你需要计算的总时间前加入两个线程。

Thread tf = new Thread(first).start(); 
Thread ts = new Thread(second).start(); 

tf.join(); 
ts.join(); 

long totalTime = System.nanoTime() - startTime;