250 * guarantee FIFO order among tied entries.
251 */
252 private static final AtomicLong sequencer = new AtomicLong(0);
253
254 /** Sequence number to break ties FIFO */
255 private final long sequenceNumber;
256
257
258 /** The time the task is enabled to execute in nanoTime units */
259 private volatile long time;
260
261 private final Timer timer;
262
263 DelayedTimer(Timer timer, long nanos) {
264 this.timer = timer;
265 time = nanos;
266 sequenceNumber = sequencer.getAndIncrement();
267 }
268
269
270 final public long getDelay(TimeUnit unit) {
271 return unit.convert(time - now(), TimeUnit.NANOSECONDS);
272 }
273
274 final void setTime(long nanos) {
275 time = nanos;
276 }
277
278 final Timer getTimer() {
279 return timer;
280 }
281
282 public int compareTo(Delayed other) {
283 if (other == this) { // compare zero ONLY if same object
284 return 0;
285 }
286 if (other instanceof DelayedTimer) {
287 DelayedTimer x = (DelayedTimer)other;
288 long diff = time - x.time;
289 if (diff < 0) {
290 return -1;
|
250 * guarantee FIFO order among tied entries.
251 */
252 private static final AtomicLong sequencer = new AtomicLong(0);
253
254 /** Sequence number to break ties FIFO */
255 private final long sequenceNumber;
256
257
258 /** The time the task is enabled to execute in nanoTime units */
259 private volatile long time;
260
261 private final Timer timer;
262
263 DelayedTimer(Timer timer, long nanos) {
264 this.timer = timer;
265 time = nanos;
266 sequenceNumber = sequencer.getAndIncrement();
267 }
268
269
270 public final long getDelay(TimeUnit unit) {
271 return unit.convert(time - now(), TimeUnit.NANOSECONDS);
272 }
273
274 final void setTime(long nanos) {
275 time = nanos;
276 }
277
278 final Timer getTimer() {
279 return timer;
280 }
281
282 public int compareTo(Delayed other) {
283 if (other == this) { // compare zero ONLY if same object
284 return 0;
285 }
286 if (other instanceof DelayedTimer) {
287 DelayedTimer x = (DelayedTimer)other;
288 long diff = time - x.time;
289 if (diff < 0) {
290 return -1;
|