Overview | Package | Class | Use | Tree | Deprecated | Index | Help
| Java™ Platform Standard Ed. 6
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## java.lang
Class ThreadLocal<T>

    java.lang.Object
      java.lang.ThreadLocal<T>

Direct Known Subclasses:
  InheritableThreadLocal

    public class ThreadLocal<T>

extends Object

This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (via its `get` or `set` method) has its own, independently initialized copy of the variable. `ThreadLocal` instances are typically private static fields in classes that wish to associate state with a thread (e.g., a user ID or Transaction ID).

For example, the class below generates unique identifiers local to each thread. A thread's id is assigned the first time it invokes `UniqueThreadIdGenerator.getCurrentThreadId()` and remains unchanged on subsequent calls.

     import java.util.concurrent.atomic.AtomicInteger;

     public class UniqueThreadIdGenerator {

         private static final AtomicInteger uniqueId = new AtomicInteger(0);

         private static final ThreadLocal < Integer > uniqueNum =
             new ThreadLocal < Integer > () {
                 @Override protected Integer initialValue() {
                     return uniqueId.getAndIncrement();
             }
         };

         public static int getCurrentThreadId() {
             return uniqueId.get();
         }
     } // UniqueThreadIdGenerator

Each thread holds an implicit reference to its copy of a thread-local variable as long as the thread is alive and the `ThreadLocal` instance is accessible; after a thread goes away, all of its copies of thread-local instances are subject to garbage collection (unless other references to these copies exist).

Since:
  1.2

Constructor Summary
`ThreadLocal()` Creates a thread local variable.

Method Summary
`T` | `get()` Returns the value in the current thread's copy of this thread-local variable.
`protected T` | `initialValue()` Returns the current thread's "initial value" for this thread-local variable.
`void` | `remove()` Removes the current thread's value for this thread-local variable.
`void` | `set(T value)` Sets the current thread's copy of this thread-local variable to the specified value.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### ThreadLocal

    public ThreadLocal()

  Creates a thread local variable.

Method Detail

### initialValue

    protected T initialValue()

  Returns the current thread's "initial value" for this thread-local variable. This method will be invoked the first time a thread accesses the variable with the `get()` method, unless the thread previously invoked the `set(T)` method, in which case the `initialValue` method will not be invoked for the thread. Normally, this method is invoked at most once per thread, but it may be invoked again in case of subsequent invocations of `remove()` followed by `get()`.

  This implementation simply returns `null`; if the programmer desires thread-local variables to have an initial value other than `null`, `ThreadLocal` must be subclassed, and this method overridden. Typically, an anonymous inner class will be used.

  Returns:
    the initial value for this thread-local

### get

    public T get()

  Returns the value in the current thread's copy of this thread-local variable. If the variable has no value for the current thread, it is first initialized to the value returned by an invocation of the `initialValue()` method.

  Returns:
    the current thread's value of this thread-local

### set

    public void set(T value)

  Sets the current thread's copy of this thread-local variable to the specified value. Most subclasses will have no need to override this method, relying solely on the `initialValue()` method to set the values of thread-locals.

  Parameters:
    `value` - the value to be stored in the current thread's copy of this thread-local.

### remove

    public void remove()

  Removes the current thread's value for this thread-local variable. If this thread-local variable is subsequently read by the current thread, its value will be reinitialized by invoking its `initialValue()` method, unless its value is set by the current thread in the interim. This may result in multiple invocations of the `initialValue` method in the current thread.

  Since:
    1.5

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
| Java™ Platform Standard Ed. 6
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

Submit a bug or feature
For further API reference and developer documentation, see Java SE Developer Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.

Copyright © 1993, 2010, Oracle and/or its affiliates. All rights reserved.