diff options
Diffstat (limited to 'vespajlib')
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/concurrent/SystemTimer.java | 23 | ||||
-rw-r--r-- | vespajlib/src/main/java/com/yahoo/concurrent/Timer.java | 14 |
2 files changed, 13 insertions, 24 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/concurrent/SystemTimer.java b/vespajlib/src/main/java/com/yahoo/concurrent/SystemTimer.java index 8111d52a10f..c2fca806a85 100644 --- a/vespajlib/src/main/java/com/yahoo/concurrent/SystemTimer.java +++ b/vespajlib/src/main/java/com/yahoo/concurrent/SystemTimer.java @@ -42,21 +42,18 @@ public enum SystemTimer implements Timer { SystemTimer() { long napTime = adjustTimeoutByDetectedHz(Duration.ofMillis(1)).toMillis(); - millis = TimeUnit.NANOSECONDS.toMillis(System.nanoTime()); - Thread thread = new Thread() { - - @Override - public void run() { - while (true) { - millis = TimeUnit.NANOSECONDS.toMillis(System.nanoTime()); - try { - Thread.sleep(napTime); - } catch (InterruptedException e) { - break; - } + long creationNanos = System.nanoTime(); + millis = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - creationNanos); + Thread thread = new Thread(() -> { + while (true) { + millis = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - creationNanos); + try { + Thread.sleep(napTime); + } catch (InterruptedException e) { + break; } } - }; + }); thread.setDaemon(true); thread.setName("vespa-system-timer"); thread.start(); diff --git a/vespajlib/src/main/java/com/yahoo/concurrent/Timer.java b/vespajlib/src/main/java/com/yahoo/concurrent/Timer.java index c41c762c989..9328039aae6 100644 --- a/vespajlib/src/main/java/com/yahoo/concurrent/Timer.java +++ b/vespajlib/src/main/java/com/yahoo/concurrent/Timer.java @@ -20,16 +20,8 @@ public interface Timer { * @return The current value of the timer, in milliseconds. */ long milliTime(); - Timer monotonic = () -> TimeUnit.NANOSECONDS.toMillis(System.nanoTime()); - static Timer wrap(Clock original) { - return new Timer() { - private final Clock clock = original; - - @Override - public long milliTime() { - return clock.millis(); - } - }; } - + long creationNanos = System.nanoTime(); // Avoid monotonic timer overflow for the first 146 years of JVM uptime. + Timer monotonic = () -> TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - creationNanos); + static Timer wrap(Clock original) { return original::millis; } default Instant instant() { return Instant.ofEpochMilli(milliTime()); } } |