perf[time]: improve the precision of the now() method

This commit is contained in:
sun
2023-02-21 20:14:48 +08:00
parent 6ba3bfa16b
commit 0e587eda79
2 changed files with 6 additions and 5 deletions
@@ -55,7 +55,6 @@ public abstract class SchedulerBus {
private static long lastTriggerTimestamp = 0L;
public static final long TRIGGER_MILLIS_INTERVAL = TimeUtils.MILLIS_PER_SECOND;
/**
* 在scheduler中,最小的triggerTimestamp
*/
@@ -68,7 +67,9 @@ public abstract class SchedulerBus {
} catch (Exception e) {
logger.error("scheduler triggers an error.", e);
}
}, 0, TRIGGER_MILLIS_INTERVAL, TimeUnit.MILLISECONDS);
}, 0, TimeUtils.MILLIS_PER_SECOND, TimeUnit.MILLISECONDS);
executor.scheduleAtFixedRate(TimeUtils::currentTimeMillis, 0, 20, TimeUnit.MILLISECONDS);
}
public static class SchedulerThreadFactory implements ThreadFactory {
@@ -31,8 +31,6 @@ import java.util.TimeZone;
*/
public abstract class TimeUtils {
private static long timestamp = System.currentTimeMillis();
// 一秒钟对应的纳秒数
public static final long NANO_PER_SECOND = 1_000_000_000;
// 一秒钟对应的毫秒数
@@ -85,6 +83,8 @@ public abstract class TimeUtils {
SchedulerBus.refreshMinTriggerTimestamp();
}
private static volatile long timestamp = System.currentTimeMillis();
/**
* 获取精确的时间戳
*/
@@ -94,7 +94,7 @@ public abstract class TimeUtils {
}
/**
* 获取最多只有一秒延迟的粗略时间戳,适用于对时间精度要求不高的场景,最多只有一秒误差
* 获取最多只有20ms延迟的粗略时间戳,适用于对时间精度要求不高的场景,最多只有20ms误差
* <p>
* 比System.currentTimeMillis()的性能高10倍
*/