Spec-Zone.ru › OpenJDK 24

Класс 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)
Создаёт локальную переменную потока.

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

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

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

© 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.
https://download.java.net/java/early_access/jdk24/docs/api/java.base/java/lang/ThreadLocal.html

Spec-Zone.ru

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