Spec-Zone.ru › OpenJDK 27

Класс ThreadLocal<T>

java.lang.Object
java.lang.ThreadLocal<T>
Параметры типа:
T - тип значения переменной, локальной для потока
Прямые известные подклассы:
InheritableThreadLocal
public class ThreadLocal<T> extends Object
Этот класс предоставляет переменные, локальные для потока. Эти переменные отличаются от своих обычных аналогов тем, что у каждого потока, который обращается к такой переменной (через метод get или set), есть собственная независимо инициализируемая копия переменной. Экземпляры ThreadLocal обычно являются закрытыми статическими полями классов, которым необходимо связать состояние с потоком (например, идентификатор пользователя или идентификатор транзакции).

Например, приведённый ниже класс создаёт уникальные идентификаторы, локальные для каждого потока. Идентификатор потока назначается при первом вызове ThreadId.get() и остаётся неизменным при последующих вызовах.

import java.util.concurrent.atomic.AtomicInteger;

public class ThreadId {
    // Atomic integer containing the next thread ID to be assigned
    private static final AtomicInteger nextId = new AtomicInteger(0);

    // Thread local variable containing each thread's ID
    private static final ThreadLocal<Integer> threadId =
        new ThreadLocal<Integer>() {
            @Override protected Integer initialValue() {
                return nextId.getAndIncrement();
        }
    };

    // Returns the current thread's unique ID, assigning it if necessary
    public static int get() {
        return threadId.get();
    }
}

Каждый поток хранит неявную ссылку на свою копию переменной, локальной для потока, пока поток существует и доступен экземпляр ThreadLocal; после завершения потока все его копии экземпляров переменных, локальных для потока, могут быть удалены сборщиком мусора (если на эти копии не существует других ссылок).

Начиная с:
1.2

Краткое описание конструкторов

Конструктор Описание
ThreadLocal()
Создаёт переменную, локальную для потока.

Краткое описание методов

Модификатор и тип Метод Описание
T get()
Возвращает значение из копии этой переменной, локальной для потока, принадлежащей текущему потоку.
protected T initialValue()
Возвращает «начальное значение» этой переменной, локальной для потока, для текущего потока.
void remove()
Удаляет значение этой переменной, локальной для потока, для текущего потока.
void set(T value)
Устанавливает указанное значение в копии этой переменной, локальной для потока, принадлежащей текущему потоку.
static <S> ThreadLocal<S> withInitial(Supplier<? extends S> supplier)
Создаёт переменную, локальную для потока.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создаёт и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли этот объект какому-либо другому объекту.
protected void finalize()
Устарел и подлежит удалению: этот элемент API подлежит удалению в будущей версии.
Финализация объявлена устаревшей и подлежит удалению в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо до истечения определённого времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо до истечения определённого времени.

Подробное описание конструкторов

ThreadLocal

public ThreadLocal()
Создаёт переменную, локальную для потока.
См. также:
  • withInitial(java.util.function.Supplier)

Подробное описание методов

initialValue

protected T initialValue()
Возвращает «начальное значение» этой переменной, локальной для потока, для текущего потока. Этот метод вызывается при первом обращении потока к переменной с помощью метода get(), если только поток ранее не вызывал метод set(T); в этом случае метод initialValue для данного потока вызван не будет. Обычно этот метод вызывается не более одного раза для каждого потока, но может быть вызван повторно, если после remove() выполняются последующие вызовы get().
Требования к реализации:
Эта реализация просто возвращает null; если программисту нужно, чтобы переменные, локальные для потока, имели начальное значение, отличное от null, можно создать подкласс ThreadLocal и переопределить этот метод либо использовать метод withInitial(Supplier) для создания ThreadLocal.
Возвращает:
начальное значение этой переменной, локальной для потока
См. также:
  • withInitial(java.util.function.Supplier)

withInitial

public static <S> ThreadLocal<S> withInitial(Supplier<? extends S> supplier)
Создаёт переменную, локальную для потока. Начальное значение переменной определяется вызовом метода get у Supplier.
Параметры типа:
S - тип значения переменной, локальной для потока
Параметры:
supplier - поставщик, используемый для определения начального значения
Возвращает:
новую переменную, локальную для потока
Выбрасывает:
NullPointerException - если указанный поставщик равен null
Начиная с:
1.8

get

public T get()
Возвращает значение из копии этой переменной, локальной для потока, принадлежащей текущему потоку. Если для текущего потока у переменной нет значения, она сначала инициализируется значением, возвращённым при вызове метода initialValue().
Возвращает:
значение этой переменной, локальной для потока, для текущего потока

set

public void set(T value)
Устанавливает указанное значение в копии этой переменной, локальной для потока, принадлежащей текущему потоку. Большинству подклассов не требуется переопределять этот метод; они могут использовать только метод initialValue() для установки значений переменных, локальных для потока.
Параметры:
value - значение, которое будет сохранено в копии этой переменной, локальной для потока, принадлежащей текущему потоку.

remove

public void remove()
Удаляет значение этой переменной, локальной для потока, для текущего потока. Если текущий поток впоследствии считает значение этой переменной, локальной для потока, оно будет инициализировано повторно вызовом метода initialValue(), если только текущий поток за это время не установит для неё значение. Это может привести к многократным вызовам метода initialValue в текущем потоке.
Начиная с:
1.5

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API