Класс 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 |
Устанавливает указанное значение в копии этой переменной, локальной для потока, принадлежащей текущему потоку. |
static <S> ThreadLocal |
withInitial |
Создаёт переменную, локальную для потока. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли этот объект какому-либо другому объекту. |
protected void |
finalize() |
Устарел и подлежит удалению: этот элемент API подлежит удалению в будущей версии. Финализация объявлена устаревшей и подлежит удалению в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
String |
toString() |
Возвращает строковое представление объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо до истечения определённого времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате уведомления или прерывания, либо до истечения определённого времени. |
Подробное описание конструкторов
ThreadLocal
public ThreadLocal()
- См. также:
Подробное описание методов
initialValue
protected T initialValue()
get(), если только поток ранее не вызывал метод set(T); в этом случае метод initialValue для данного потока вызван не будет. Обычно этот метод вызывается не более одного раза для каждого потока, но может быть вызван повторно, если после remove() выполняются последующие вызовы get().- Требования к реализации:
- Эта реализация просто возвращает
null; если программисту нужно, чтобы переменные, локальные для потока, имели начальное значение, отличное отnull, можно создать подклассThreadLocalи переопределить этот метод либо использовать методwithInitial(Supplier)для создания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, 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.