高并发下,使用System.currentTimeMillis()计算时间差出现负数

在高并发测试中,使用System.currentTimeMillis()计算时间差出现负数问题,原因可能是系统时间同步导致。虽然关闭网络时间同步可以解决此问题,但实际开发中这种方法仍存在不准确性,因为其依赖于操作系统的时间颗粒度。推荐使用System.nanoTime()来精确计算时间差,因为它返回的是JVM运行的纳秒数,不受NTP影响,适合计算时间间隔。
摘要由CSDN通过智能技术生成

        最近在压测一个接口,使用如下方法获取时间差:

long start = System.currentTimeMillis();
object.methodinvoke();
long end = System.currentTimeMillis();
long cost= end - start;

打印的日志记录时间差,后来发现日志里出现了很多负数,感到很奇怪,查了资料,发现这个方法里面有坑!

来看看currentTimeMillis()这个方法的源码注释:

    /**
     * Returns the current time in milliseconds.  Note that
     * while the unit of time of the return value is a millisecond,
     * the granularity of the value depends on the underlying
     * operating system and may be larger.  For example, many
     * operating systems measure time in units of tens of
     * milliseconds.
     *
     * <p> See the description of the class <code>Date</code> for
     * a discussion of slight discrepancies that may arise between
     * "computer time" and coordinated universal time (UTC).
     *
     * @
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值