public class SystemClock {
private static final String THREAD_NAME = "system.clock";
private static final SystemClock MILLIS_CLOCK = new SystemClock(1L);
private final long precision;
private final AtomicLong now;
private SystemClock(long precision) {
this.precision = precision;
this.now = new AtomicLong(System.currentTimeMillis());
this.scheduleClockUpdating();
}
public static SystemClock millisClock() {
return MILLIS_CLOCK;
}
private void scheduleClockUpdating() {
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor((runnable) -> {
Thread thread = new Thread(runnable, "system.clock");
thread.setDaemon(true);
return thread;
});
scheduler.scheduleAtFixedRate(() -> {
this.now.set(System.currentTimeMillis());
}, this.precision, this.precision, TimeUnit.MILLISECONDS);
}
public long now() {
return this.now.get();
}
保证时钟一致性
最新推荐文章于 2024-07-13 13:55:40 发布