< prev index next >
src/java.base/share/classes/java/lang/ThreadLocal.java
Print this page
@@ -22,10 +22,12 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package java.lang;
+import jdk.internal.misc.TerminatingThreadLocal;
+
import java.lang.ref.*;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Supplier;
@@ -169,10 +171,23 @@
}
return setInitialValue();
}
/**
+ * Returns {@code true} if there is a value in the current thread's copy of
+ * this thread-local variable, even if that values is {@code null}.
+ *
+ * @return {@code true} if current thread has associated value in this
+ * thread-local variable; {@code false} if not
+ */
+ boolean isPresent() {
+ Thread t = Thread.currentThread();
+ ThreadLocalMap map = getMap(t);
+ return map != null && map.getEntry(this) != null;
+ }
+
+ /**
* Variant of set() to establish initialValue. Used instead
* of set() in case user has overridden the set() method.
*
* @return the initial value
*/
@@ -182,10 +197,11 @@
ThreadLocalMap map = getMap(t);
if (map != null)
map.set(this, value);
else
createMap(t, value);
+ TerminatingThreadLocal.register(this);
return value;
}
/**
* Sets the current thread's copy of this thread-local variable
< prev index next >