首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得多线程应用程序中作业执行时间的精确时间戳?

如何获得多线程应用程序中作业执行时间的精确时间戳?
EN

Stack Overflow用户
提问于 2011-05-05 11:55:42
回答 4查看 1.4K关注 0票数 0

如何在多线程程序中添加时间戳:

  • J3依赖于J1 & J2
  • J5依赖于J4

并获取每个作业(线程)执行的不同时间。

我有6个不同的文件: J1、J2、J3 (在其中我加入了J1 & J2)、J4、J5 (在那里我加入了J4)和J6 (在这里我启动了所有线程)。

我增加了这一功能:

代码语言:javascript
复制
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss:ms");
Calendar cal = Calendar.getInstance();

示例代码(一个线程) --

代码语言:javascript
复制
import java.io.*;
import java.*;
import java.util.*;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class Job1 extends Thread{
String msg;
public void run()
{


System.out.println("Execution of job1 (addition job) started");
System.out.println();
System.out.print("3+2=" +(3+2));
System.out.println();
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss:ms");
Calendar cal = Calendar.getInstance();
     }

     Job1(String mg)
     {
      msg=mg;
     }

     }

但是,每个线程我都有相同的时间。

更新

这是我得到的输出。

代码语言:javascript
复制
C:\Program Files\Java\jdk1.6.0_03\bin>javac threadcontainer.java
C:\Program Files\Java\jdk1.6.0_03\bin>java threadcontainer
J1->4719906194666
J2->4719906696464
Execution of job1 (addition job) started
3+2=5
J4->4719911159535
Execution of job4 (multiplication job) started
3*2=6Job 5 executing
J5-> 4719911737462
Execution of job2 (subtraction job) started
3-2=1Job 3 executing
J3->4719912405874
EN

回答 4

Stack Overflow用户

发布于 2011-05-05 11:59:12

您应该使用System.nanoTime()更准确、更快。

日历是您可以创建的最昂贵的对象之一,使用日期格式可能效率很低。":ms“没有任何用处,所以我怀疑你只有第二种决心。如果您想要毫秒,请按照javadoc使用".SSS“。

票数 4
EN

Stack Overflow用户

发布于 2011-05-05 12:00:04

首先,发布更多的代码,这样我们就可以看到您真正在做什么,以及您要用日期格式做什么等等。

然后: SimpleDateFormat的Javadoc说:

同步 SimpleDateFormat并不是线程安全的.用户应该为每个线程创建一个单独的实例。

这可能会导致你所看到的。

票数 2
EN

Stack Overflow用户

发布于 2011-05-05 12:06:03

使用java.lang.System.nanoTime()来度量经过的时间--这是可用的最精确的计时器。不过,它是一个任意的计数器(它并不代表时间本身,它只是计数纳秒),所以您需要像这样使用它:

代码语言:javascript
复制
long t1 = System.nanoTime(); 

// do something

long t2 = System.nanoTime();

long elapsedTime = t2 - t1; // in nano-seconds, so remember to scale!

这里有一个很好的线程,它深入到nanoTime调用的技术细节中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5897247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档