`
康敏栋
  • 浏览: 171275 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

System.nanoTime获取当前精确时间(ns)

 
阅读更多
今天突然遇到一个问题,如何得到某段代码运行所花的时间,刚开始System.currentTimeMillis()搞了半天,我靠,所花的时间一直是0,电脑太神奇了?运行时间都可以忽略不计?
上网查,这才发现System.currentTimeMillis()精确到的是ms,原来代码运行太快了,用ms无法做它的运行时间单位。JDK1.5之后java中的计时给出了更精确更给力的方法:System.nanoTime(),输出的精度是纳秒ns级别
运行,果然吖。
有个需要注意的地方,不能用来计算今天是哪一天,这个你懂得

文章出自http://blog.sina.com.cn/s/blog_833611cd0100vamg.html

代码如下
Test3.java
public class Test3 {
	public static void main(String[] args) {
		String[] a = new String[] { "aaa", "aaa", "ccc" };
		String[] b = new String[] { "aaa", "bbb", "ccc" };
		Clock clock = Clock.getClock();
		long start = System.nanoTime(); // 获取开始时间
		System.out.println(equals(a,b));
		long end = System.nanoTime(); // 获取结束时间
		clock.stopAndPrint("耗时:");
		System.out.println(end + "===" + start);
	}
	//比较两个string[] 无序是否相等
	public static boolean equals(String a[],String b[]){   
	       if(a.length!=b.length) return false;   
	       int n=a[0].hashCode()^b[0].hashCode();   
	       for(int i=1;i<a.length;i++){   
	            n^=a[i].hashCode()^b[i].hashCode();   
	      }   
	       if(n==0) return true;   
	         return false;   
	    }  
}

Clock.java
public class Clock {

    private long start;

    private Clock() { }

    public static Clock getClock() {
        Clock instance = new Clock();
        instance.start = System.nanoTime();
        return instance;
    }
    
    public void reset() {
        this.start = System.nanoTime();
    }

    public long stop() {
        return System.nanoTime() - start;
    }

    public void stopAndPrint(String name) {
        long diff = System.nanoTime() - start;
        System.out.println(name + " " + diff + " ns");
    }
}
分享到:
评论

相关推荐

    android时间戳总结:System.nanoTime(),System.currentTimeMillis(),SystemClock

    System.nanoTime() System.currentTimeMillis() SystemClock.uptimeMillis() SystemClock.elapsedRealtime() SystemClock.currentThreadTimeMillis 0、时间的单位: 秒:second 毫秒:Millisecond 微妙:Microsecond...

    JAVA版本标准纳秒实现

    2、解决System.nanoTime();并不代表实际时间纳秒的问题。 3、解决解决System.nanoTime();不同JVM获取值不一致的问题。 4、解决解决System.nanoTime();值无法与毫秒时间换算问题。 5、可与GO的纳秒时间兼容。

    Java中获取比毫秒更精确的时间.docx

    在Java中,`System.currentTimeMillis()` 是一个常用的获取当前时间(以毫秒为单位)的方法。然而,在实际应用中,可能会遇到使用该方法获取的时间间隔出现异常大的情况,例如在毫秒级别的时间测量中出现16毫秒的大...

    System.currentTimeMillis() 和 System.nanoTime() 哪个更快?大

    互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术,人工智能互联网资讯,技术简介,IT、AI技术...

    TESTcode:测试代码。 简单密码,吸血鬼编号,频率分析器和System.nanoTime();

    测试代码 测试代码。 简单密码 吸血鬼号码 频率分析仪和System.nanoTime(); PCG 谨防! 这些只是beta版之前的一部分; )

    java 记录程序执行的时间

    首先,我们可以使用`System.currentTimeMillis()`方法来获取当前时间(单位为毫秒)作为基准点,然后在程序执行完毕后再获取一次时间,通过两者之差即可计算出程序的运行时间。例如: ```java long startTime = ...

    momomo.com.platform.Nanotime:从Java Runtime要求时间时允许更高的精度。 即纳秒精度

    `Nanotime`库主要解决了Java原生API在获取当前时间时精度不足的问题。在Java中,`System.currentTimeMillis()`返回的是自1970年1月1日00:00:00 GMT以来的毫秒数,而`nanoTime()`方法虽然返回的是自某个不确定的起点...

    java程序_秒表

    这个版本的秒表使用`Instant.now()`获取当前时间点,`Duration.between()`方法计算两个时间点之间的持续时间。`Duration`对象提供了方便的方法,如`toMillis()`和`seconds()`,以获取毫秒或秒数。 为了增强秒表的...

    测试时间的算法

    总结起来,Java提供了多种工具和方法来测试代码的执行时间,包括`System.currentTimeMillis()`、`System.nanoTime()`、`TimeUnit`以及`Thread.sleep()`等。开发者可以根据具体需求选择合适的方式,对代码进行性能...

    nanotime:返回当前纳米时间。 用于制作 id

    "nanotime"这个概念,正如标题所提及的,指的是能够返回当前时间的纳米级别精度的函数或工具。在JavaScript中,虽然内置的Date对象可以提供毫秒级别的精度,但当需要更高精度的时间戳时,就需要借助如"nanotime"这样...

    十分有用的java小结

    System.nanoTime() 函数用来返回最准确的可用系统计时器的当前值,以毫微秒为单位。例如: ```java long startTime = System.nanoTime(); // ... 代码被测量 ... long estimatedTime = System.nanoTime() - ...

    用java编写的计时器

    这种方法通过创建`java.util.Date`对象来获取当前时间,并利用`SimpleDateFormat`类来格式化日期。具体步骤如下: 1. **创建计时器类**:首先定义一个名为`Timer`的类,用于封装计时逻辑。 2. **初始化日期格式化器...

    Java计算程序代码执行时间的方法小结

    System.nanoTime() 方法可以返回当前的纳秒数,该方法可以用来记录程序的开始和结束时间,从而计算出程序的执行时间。以下是使用 System.nanoTime() 方法记录程序执行时间的示例代码: ```java long startTime = ...

    miaobiao.rar_java 秒表

    2. 开始计时:调用`System.currentTimeMillis()`或`System.nanoTime()`记录当前时间,作为计时的起点。 3. 暂停计时:保存当前时间,以便稍后恢复计时。 4. 继续计时:从上次暂停的时间点开始,继续计时。 5. 停止...

    性能监控工具类(StopWatchUtil)

    在Java中,我们可以使用System.nanoTime()方法获取纳秒级别的精确时间,从而计算出精确的执行时间。这个工具类可能会包含以下关键方法: 1. `start()`: 开始计时,通常会记录当前时间作为起始时间。 2. `stop()`: ...

    java计时器

    它通过获取当前系统时间(毫秒级),记录起始时间和结束时间,然后计算两者之间的差值来得到所需时间。 ```java import java.io.PrintStream; final class Timer { private long startTime; private long ...

    System Lambda是一个函数集合,用于测试使用javalangSystem的代码.zip

    3. **系统时间(System.currentTimeMillis(), System.nanoTime())**:在某些测试中,需要固定或者精确控制时间。System Lambda 可以提供预设的时间值,避免因为系统时间的变化导致测试结果不一致。 4. **安全退出...

    火山安卓取网络时间例程和时间戳例程.rar

    在Java和Android中,你可以使用`System.currentTimeMillis()`函数获取当前时间的时间戳,单位是毫秒。如果需要高精度的时间戳,可以使用`System.nanoTime()`,但请注意它并不直接代表时间,而是微秒级别的系统计时器...

    Stopwatch:秒表应用程序-线程

    在Java中,我们可以通过记录两个`System.nanoTime()`调用之间的差值来获取微秒或纳秒级别的精度,然后转换为更易读的秒、毫秒等单位。 ```java long startTime = System.nanoTime(); // 执行需要计时的代码 long ...

Global site tag (gtag.js) - Google Analytics