2015-12-04 34 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;