【问题标题】:how to measure the total execution time with threads Java [duplicate]如何使用线程Java测量总执行时间[重复]
【发布时间】:2015-12-04 10:52:18
【问题描述】:

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

    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);     

} 

【问题讨论】:

  • 在记录总时间之前保留对线程的引用并加入它们。
  • 这就是线程的意义——它们并行运行,彼此独立。因此,在您启动它们之后,您会在线程仍在运行时进入下一行。您可以使用@DavidSchwartz 所写的join,但您应该了解它的作用。

标签: java multithreading


【解决方案1】:

在计算总时间之前,您需要加入两个线程。

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

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

long totalTime = System.nanoTime() - startTime;

【讨论】:

    猜你喜欢
    • 2011-02-16
    • 2019-10-03
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    • 2020-03-19
    • 1970-01-01
    • 2016-06-11
    相关资源
    最近更新 更多