得到这个线程运行了多少秒

时间:2016-12-11 20:33:28

标签: java multithreading nanotime

嘿,我的代码中有这个功能:

public synchronized void finished()
{
    howManyDone++;
    log.append("Finished creating board "+this.howManyDone+"\n");
    if(howManyDone == boards.length)
        JOptionPane.showMessageDialog(log, "All Boards Were Created.","Attention",JOptionPane.WARNING_MESSAGE);
}

我想在log.append命令中添加多少evrey线程以秒为单位运行。 我试着这样做:

public synchronized void finished()
{
    long start = System.nanoTime();
    howManyDone++;
    long end = System.nanoTime();
    long estTime = end - start;
    double seconds = (double)estTime/1000000000;
}

并且每次打印秒数如​​下:

log.append("Finished creating board " +this.howManyDone+ " in "+seconds+"\n");

但是我在日志中得到的数字就像秒:6.00E-7等等...... 我做错了什么?

感谢

1 个答案:

答案 0 :(得分:0)

除非您能够记录线程启动工作时的系统时间,否则无法获得总运行时间。只需在完成功能的开头调用它就不够了。

对于一个解决方案,您可以创建一个Thread子类来跟踪它运行的时间,如下所示:

public class TimedThread extends Thread {

    private long startTime;
    private long endTime;

    public TimedThread(Runnable r) {
        super(r);
    }

    @Override
    public void run() {
        startTime = System.nanoTime();
        super.run();
        endTime = System.nanoTime();
    }

    public long getRunDuration() {
        return endTime - startTime;
    }
}

然后使用TimedThread而不是Threads,您需要进行时间计算(假设您可以控制该部分代码)。