All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sun.xml.ws.rx.util.DelayedReference Maven / Gradle / Ivy

There is a newer version: 4.0.4
Show newest version
/*
 * Copyright (c) 1997, 2022 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Distribution License v. 1.0, which is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

package com.sun.xml.ws.rx.util;

import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;

/**
 * 

* A generic immutable reference holder that implements {@link Delayed} interface * and thus is suitable for use in a {@link java.util.concurrent.DelayQueue} * instances. *

* *

* Instances of this {@code DelayedReference} class work with a milliseconds precision. *

* */ public class DelayedReference implements Delayed { private final V data; private final long resumeTimeInMilliseconds; private DelayedReference(V data, long resumeTimeInMilliseconds) { this.data = data; this.resumeTimeInMilliseconds = resumeTimeInMilliseconds; } public DelayedReference(V data, long delay, TimeUnit timeUnit) { this(data, timeUnit.toMillis(delay) + System.currentTimeMillis()); } public V getValue() { return data; } @Override public long getDelay(TimeUnit unit) { return unit.convert(resumeTimeInMilliseconds - System.currentTimeMillis(), TimeUnit.MILLISECONDS); } @Override public int compareTo(Delayed other) { long thisDelay = resumeTimeInMilliseconds - System.currentTimeMillis(); long thatDelay = other.getDelay(TimeUnit.MILLISECONDS); return Long.compare(thisDelay, thatDelay); } public DelayedReference updateData(V data) { return new DelayedReference<>(data, resumeTimeInMilliseconds); } public DelayedReference updateDelay(long newDelay, TimeUnit timeUnit) { return new DelayedReference<>(data, timeUnit.toMillis(newDelay) + System.currentTimeMillis()); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy