From 693392fe6c0022e7ec5060192ee322c7753b0d90 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Fri, 5 Jun 2015 11:25:50 +0200 Subject: Changes for Dozmod v1.1 --- .../java/org/openslx/util/TimeoutReference.java | 49 ++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 src/main/java/org/openslx/util/TimeoutReference.java (limited to 'src/main/java/org/openslx/util') diff --git a/src/main/java/org/openslx/util/TimeoutReference.java b/src/main/java/org/openslx/util/TimeoutReference.java new file mode 100644 index 0000000..4d7a992 --- /dev/null +++ b/src/main/java/org/openslx/util/TimeoutReference.java @@ -0,0 +1,49 @@ +package org.openslx.util; + +/** + * A reference holder that will only return the object it is holding if + * the given timeout has not been reached. + * The timeout will start anew if you set this reference to hold a new object, + * or if you retrieve the object, and refreshOnGet is set to true. + */ +public class TimeoutReference +{ + + private final long timeoutMs; + private long deadline; + private boolean refreshOnGet; + private T item; + + public TimeoutReference( boolean refreshOnGet, long timeoutMs, T item ) + { + this.refreshOnGet = refreshOnGet; + this.item = item; + this.timeoutMs = timeoutMs; + this.deadline = System.currentTimeMillis() + timeoutMs; + } + + public TimeoutReference( long timeoutMs, T item ) + { + this( false, timeoutMs, item ); + } + + public synchronized T get() + { + if ( item != null ) { + final long now = System.currentTimeMillis(); + if ( deadline < now ) { + item = null; + } else if ( refreshOnGet ) { + deadline = now + timeoutMs; + } + } + return item; + } + + public synchronized void set( T newItem ) + { + this.item = newItem; + this.deadline = System.currentTimeMillis() + timeoutMs; + } + +} -- cgit v1.2.3-55-g7522