Spec-Zone.ru › OpenJDK 17

Класс ThreadLocal<T>

java.lang.Object
java.lang.ThreadLocal<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

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, 2021, 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://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/ThreadLocal.html

Spec-Zone.ru

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