嘿,我的代码中有这个功能:
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等等...... 我做错了什么?
感谢
答案 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
,您需要进行时间计算(假设您可以控制该部分代码)。