SystemTimer.java
- package com.birbit.android.jobqueue.timer;
- import com.birbit.android.jobqueue.log.JqLog;
- import java.util.concurrent.TimeUnit;
- public class SystemTimer implements Timer {
- final long startWallClock;
- final long startNs;
- public SystemTimer() {
- JqLog.d("creating system timer");
- //noinspection DIRECT_TIME_ACCESS
- startWallClock = TimeUnit.MILLISECONDS.toNanos(System.currentTimeMillis());
- //noinspection DIRECT_TIME_ACCESS
- startNs = System.nanoTime();
- }
- @Override
- public long nanoTime() {
- //noinspection DIRECT_TIME_ACCESS
- return System.nanoTime() - startNs + startWallClock;
- }
- @Override
- public void waitOnObjectUntilNs(Object object, long untilNs) throws InterruptedException {
- long now = nanoTime();
- if (now > untilNs) {
- //noinspection TIMED_WAIT
- object.wait(1);
- } else {
- TimeUnit.NANOSECONDS.timedWait(object, untilNs - now);
- }
- }
- @Override
- public void waitOnObject(Object object) throws InterruptedException {
- //noinspection TIMED_WAIT
- object.wait();
- }
- @Override
- public void notifyObject(Object object) {
- //noinspection NOTIFY_ON_OBJECT
- object.notifyAll();
- }
- }