Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) Summary: [Ctors](https://developer.android.com/reference/java/lang/InheritableThreadLocal#pubctors) \| [Protected Methods](https://developer.android.com/reference/java/lang/InheritableThreadLocal#promethods) \| [Inherited Methods](https://developer.android.com/reference/java/lang/InheritableThreadLocal#inhmethods)

# InheritableThreadLocal

` public class InheritableThreadLocal `   
` ` ` extends https://developer.android.com/reference/java/lang/ThreadLocal<T> ` ` `

|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) |||
| ↳ | [java.lang.ThreadLocal](https://developer.android.com/reference/java/lang/ThreadLocal)\<T\> ||
|   | ↳ | java.lang.InheritableThreadLocal\<T\> |

<br />

*** ** * ** ***

This class extends `ThreadLocal` to provide inheritance of values from parent thread to child thread: when a child thread is created, the child receives initial values for all inheritable thread-local variables for which the parent has values. Normally the child's values will be identical to the parent's; however, the child's value can be made an arbitrary function of the parent's by overriding the `childValue` method in this class.

Inheritable thread-local variables are used in preference to ordinary thread-local variables when the per-thread-attribute being maintained in the variable (e.g., User ID, Transaction ID) must be automatically transmitted to any child threads that are created.

Note: During the creation of a new `https://developer.android.com/reference/java/lang/Thread#Thread(java.lang.ThreadGroup,%20java.lang.Runnable,%20java.lang.String,%20long,%20boolean)`, it is possible to *opt out* of receiving initial values for inheritable thread-local variables.
**See also:**

- `https://developer.android.com/reference/java/lang/ThreadLocal`

## Summary

| ### Public constructors ||
|---|---|
| ` https://developer.android.com/reference/java/lang/InheritableThreadLocal#InheritableThreadLocal()() ` Creates an inheritable thread local variable. |

| ### Protected methods ||
|---|---|
| ` T` | ` https://developer.android.com/reference/java/lang/InheritableThreadLocal#childValue(T)(T parentValue) ` Computes the child's initial value for this inheritable thread-local variable as a function of the parent's value at the time the child thread is created. |

### Inherited methods

From class ` https://developer.android.com/reference/java/lang/ThreadLocal ` ` T` ` https://developer.android.com/reference/java/lang/ThreadLocal#get()() `

Returns the value in the current thread's copy of this thread-local variable.
` T` ` https://developer.android.com/reference/java/lang/ThreadLocal#initialValue()() `

Returns the current thread's "initial value" for this thread-local variable.
` void` ` https://developer.android.com/reference/java/lang/ThreadLocal#remove()() `

Removes the current thread's value for this thread-local variable.
` void` ` https://developer.android.com/reference/java/lang/ThreadLocal#set(T)(T value) `

Sets the current thread's copy of this thread-local variable to the specified value.
` static <S> https://developer.android.com/reference/java/lang/ThreadLocal<S>` ` https://developer.android.com/reference/java/lang/ThreadLocal#withInitial(java.util.function.Supplier<?%20extends%20S>)(https://developer.android.com/reference/java/util/function/Supplier<? extends S> supplier) `

Creates a thread local variable.
From class ` https://developer.android.com/reference/java/lang/Object ` ` https://developer.android.com/reference/java/lang/Object` ` https://developer.android.com/reference/java/lang/Object#clone()() `

Creates and returns a copy of this object.
` boolean` ` https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object)(https://developer.android.com/reference/java/lang/Object obj) `

Indicates whether some other object is "equal to" this one.
` void` ` https://developer.android.com/reference/java/lang/Object#finalize()() `

Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.
` final https://developer.android.com/reference/java/lang/Class<?>` ` https://developer.android.com/reference/java/lang/Object#getClass()() `

Returns the runtime class of this `Object`.
` int` ` https://developer.android.com/reference/java/lang/Object#hashCode()() `

Returns a hash code value for the object.
` final void` ` https://developer.android.com/reference/java/lang/Object#notify()() `

Wakes up a single thread that is waiting on this object's monitor.
` final void` ` https://developer.android.com/reference/java/lang/Object#notifyAll()() `

Wakes up all threads that are waiting on this object's monitor.
` https://developer.android.com/reference/java/lang/String` ` https://developer.android.com/reference/java/lang/Object#toString()() `

Returns a string representation of the object.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait(long,%20int)(long timeoutMillis, int nanos) `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait(long)(long timeoutMillis) `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait()() `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*.

## Public constructors

### InheritableThreadLocal

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public InheritableThreadLocal ()
```

Creates an inheritable thread local variable.

<br />

## Protected methods

### childValue

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
protected T childValue (T parentValue)
```

Computes the child's initial value for this inheritable thread-local variable as a function of the parent's value at the time the child thread is created. This method is called from within the parent thread before the child is started.

This method merely returns its input argument, and should be overridden if a different behavior is desired.

<br />

| Parameters ||
|---|---|
| `parentValue` | `T`: the parent thread's value <br /> |

| Returns ||
|---|---|
| `T` | the child thread's initial value <br /> |