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; |