@Override
        public String toString() {
            final long currentTime = System.nanoTime();
            long remaining = deadline - currentTime + timer.startTime;

            StringBuilder buf = new StringBuilder(192).append(getClass().getSimpleName()).append('(')
                .append("deadline: ");
            if (remaining > 0) {
                buf.append(remaining).append(" ns later");
            } else if (remaining < 0) {
                buf.append(-remaining).append(" ns ago");
            } else {
                buf.append("now");
            }

            if (isCancelled()) {
                buf.append(", cancelled");
            }

            return buf.append(", task: ").append(task()).append(')').toString();
        }
Calculate goal nanoTime from startTime and current tick number,
then wait until that goal has been reached.

@return Long.MIN_VALUE if received a shutdown request,
current time otherwise (with Long.MIN_VALUE changed by +1)
jraft-core/src/main/java/com/alipay/sofa/jraft/util/timer/HashedWheelTimer.java