Class FastThreadLocal<V>

  • Type Parameters:
    V - the type of the thread-local variable

    public class FastThreadLocal<V>
    extends java.lang.Object
    A special variant of ThreadLocal that yields higher access performance when accessed from a FastThreadLocalThread.

    Internally, a FastThreadLocal uses a constant index in an array, instead of using hash code and hash table, to look for a variable. Although seemingly very subtle, it yields slight performance advantage over using a hash table, and it is useful when accessed frequently.

    To take advantage of this thread-local variable, your thread must be a FastThreadLocalThread or its subtype. By default, all threads created by DefaultThreadFactory are FastThreadLocalThread due to this reason.

    Note that the fast path is only possible on threads that extend FastThreadLocalThread, because it requires a special field to store the necessary state. An access by any other kind of thread falls back to a regular ThreadLocal.

    See Also:
    ThreadLocal
    • Constructor Summary

      Constructors 
      Constructor Description
      FastThreadLocal()  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      static void destroy()
      Destroys the data structure that keeps all FastThreadLocal variables accessed from non-FastThreadLocalThreads.
      V get()
      Returns the current value for the current thread
      V get​(InternalThreadLocalMap threadLocalMap)
      Returns the current value for the specified thread local map.
      V getAndSet​(InternalThreadLocalMap threadLocalMap, V value)
      Set the value for the specified thread local map.
      V getAndSet​(V value)
      Set the value for the current thread and returns the old value.
      V getIfExists()
      Returns the current value for the current thread if it exists, null otherwise.
      protected V initialValue()
      Returns the initial value for this thread-local variable.
      boolean isSet()
      Returns true if and only if this thread-local variable is set.
      boolean isSet​(InternalThreadLocalMap threadLocalMap)
      Returns true if and only if this thread-local variable is set.
      protected void onRemoval​(V value)
      Invoked when this thread local variable is removed by remove().
      void remove()
      Sets the value to uninitialized for the specified thread local map and returns the old value.
      void remove​(InternalThreadLocalMap threadLocalMap)
      Sets the value to uninitialized for the specified thread local map.
      static void removeAll()
      Removes all FastThreadLocal variables bound to the current thread.
      void set​(InternalThreadLocalMap threadLocalMap, V value)
      Set the value for the specified thread local map.
      void set​(V value)
      Set the value for the current thread.
      static int size()
      Returns the number of thread local variables bound to the current thread.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • FastThreadLocal

        public FastThreadLocal()
    • Method Detail

      • removeAll

        public static void removeAll()
        Removes all FastThreadLocal variables bound to the current thread. This operation is useful when you are in a container environment, and you don't want to leave the thread local variables in the threads you do not manage.
      • size

        public static int size()
        Returns the number of thread local variables bound to the current thread.
      • destroy

        public static void destroy()
        Destroys the data structure that keeps all FastThreadLocal variables accessed from non-FastThreadLocalThreads. This operation is useful when you are in a container environment, and you do not want to leave the thread local variables in the threads you do not manage. Call this method when your application is being unloaded from the container.
      • get

        public final V get()
        Returns the current value for the current thread
      • getIfExists

        public final V getIfExists()
        Returns the current value for the current thread if it exists, null otherwise.
      • get

        public final V get​(InternalThreadLocalMap threadLocalMap)
        Returns the current value for the specified thread local map. The specified thread local map must be for the current thread.
      • set

        public final void set​(V value)
        Set the value for the current thread.
      • set

        public final void set​(InternalThreadLocalMap threadLocalMap,
                              V value)
        Set the value for the specified thread local map. The specified thread local map must be for the current thread.
      • getAndSet

        public V getAndSet​(V value)
        Set the value for the current thread and returns the old value.
      • getAndSet

        public V getAndSet​(InternalThreadLocalMap threadLocalMap,
                           V value)
        Set the value for the specified thread local map. The specified thread local map must be for the current thread.
      • isSet

        public final boolean isSet()
        Returns true if and only if this thread-local variable is set.
      • isSet

        public final boolean isSet​(InternalThreadLocalMap threadLocalMap)
        Returns true if and only if this thread-local variable is set. The specified thread local map must be for the current thread.
      • remove

        public final void remove()
        Sets the value to uninitialized for the specified thread local map and returns the old value. After this, any subsequent call to get() will trigger a new call to initialValue().
      • remove

        public final void remove​(InternalThreadLocalMap threadLocalMap)
        Sets the value to uninitialized for the specified thread local map. After this, any subsequent call to get() will trigger a new call to initialValue(). The specified thread local map must be for the current thread.
      • initialValue

        protected V initialValue()
                          throws java.lang.Exception
        Returns the initial value for this thread-local variable.
        Throws:
        java.lang.Exception
      • onRemoval

        protected void onRemoval​(V value)
                          throws java.lang.Exception
        Invoked when this thread local variable is removed by remove(). Be aware that remove() is not guaranteed to be called when the `Thread` completes which means you can not depend on this for cleanup of the resources in the case of `Thread` completion.
        Throws:
        java.lang.Exception