得到该线程运行多少秒



嘿,我在代码中具有此功能:

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 thread在sec中运行了多少。我试图这样做:

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等...我在做什么错?

谢谢

,除非您能够注意到线程启动工作的系统时间,否则将无法获得总运行时间。简单地在完成功能开始时将其调用是不够的。

对于一种解决方案,您可以创建一个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 S而不是Threads,其中需要计时计算(假设您对代码的该部分进行控制)。

最新更新