src/java.base/share/classes/java/lang/InheritableThreadLocal.java

Print this page




  23  * questions.
  24  */
  25 
  26 package java.lang;
  27 import java.lang.ref.*;
  28 
  29 /**
  30  * This class extends {@code ThreadLocal} to provide inheritance of values
  31  * from parent thread to child thread: when a child thread is created, the
  32  * child receives initial values for all inheritable thread-local variables
  33  * for which the parent has values.  Normally the child's values will be
  34  * identical to the parent's; however, the child's value can be made an
  35  * arbitrary function of the parent's by overriding the {@code childValue}
  36  * method in this class.
  37  *
  38  * <p>Inheritable thread-local variables are used in preference to
  39  * ordinary thread-local variables when the per-thread-attribute being
  40  * maintained in the variable (e.g., User ID, Transaction ID) must be
  41  * automatically transmitted to any child threads that are created.
  42  *





  43  * @author  Josh Bloch and Doug Lea
  44  * @see     ThreadLocal
  45  * @since   1.2
  46  */
  47 
  48 public class InheritableThreadLocal<T> extends ThreadLocal<T> {
  49     /**
  50      * Computes the child's initial value for this inheritable thread-local
  51      * variable as a function of the parent's value at the time the child
  52      * thread is created.  This method is called from within the parent
  53      * thread before the child is started.
  54      * <p>
  55      * This method merely returns its input argument, and should be overridden
  56      * if a different behavior is desired.
  57      *
  58      * @param parentValue the parent thread's value
  59      * @return the child thread's initial value
  60      */
  61     protected T childValue(T parentValue) {
  62         return parentValue;




  23  * questions.
  24  */
  25 
  26 package java.lang;
  27 import java.lang.ref.*;
  28 
  29 /**
  30  * This class extends {@code ThreadLocal} to provide inheritance of values
  31  * from parent thread to child thread: when a child thread is created, the
  32  * child receives initial values for all inheritable thread-local variables
  33  * for which the parent has values.  Normally the child's values will be
  34  * identical to the parent's; however, the child's value can be made an
  35  * arbitrary function of the parent's by overriding the {@code childValue}
  36  * method in this class.
  37  *
  38  * <p>Inheritable thread-local variables are used in preference to
  39  * ordinary thread-local variables when the per-thread-attribute being
  40  * maintained in the variable (e.g., User ID, Transaction ID) must be
  41  * automatically transmitted to any child threads that are created.
  42  *
  43  * <p>Note: During the creation of a new {@link
  44  * Thread#Thread(ThreadGroup,Runnable,String,long,boolean) thread}, it is
  45  * possible to <i>opt out</i> of receiving initial values for inheritable
  46  * thread-local variables.
  47  *
  48  * @author  Josh Bloch and Doug Lea
  49  * @see     ThreadLocal
  50  * @since   1.2
  51  */
  52 
  53 public class InheritableThreadLocal<T> extends ThreadLocal<T> {
  54     /**
  55      * Computes the child's initial value for this inheritable thread-local
  56      * variable as a function of the parent's value at the time the child
  57      * thread is created.  This method is called from within the parent
  58      * thread before the child is started.
  59      * <p>
  60      * This method merely returns its input argument, and should be overridden
  61      * if a different behavior is desired.
  62      *
  63      * @param parentValue the parent thread's value
  64      * @return the child thread's initial value
  65      */
  66     protected T childValue(T parentValue) {
  67         return parentValue;