Spec-Zone .ru
спецификации, руководства, описания, API
|
public class ThreadLocal<T> extends Object
get
или set
метод), имеет его собственную, независимо инициализированную копию переменной. ThreadLocal
экземпляры обычно являются частными статическими полями в классах, которые хотят связать состояние с потоком (например, идентификатор пользователя или ID Транзакции). Например, class ниже генерирует уникальные идентификаторы, локальные для каждого потока. Идентификатор потока присваивается в первый раз, когда он вызывает 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
экземпляр доступен; после того, как поток уходит, все его копии локальных для потока экземпляров подвергаются сборке "мусора" (если другие ссылки на эти копии не существуют).
Конструктор и Описание |
---|
ThreadLocal()
Создает локальную переменную потока.
|
Модификатор и Тип | Метод и Описание |
---|---|
T |
get()
Возвращает значение в копии текущего потока этой локальной переменной потока.
|
protected T |
initialValue()
Возвращает "начальное значение" текущего потока для этой локальной переменной потока.
|
void |
remove()
Удаляет значение текущего потока для этой локальной переменной потока.
|
void |
set(T value)
Устанавливает копию текущего потока этой локальной переменной потока к указанному значению.
|
static <T> ThreadLocal<T> |
withInitial(Supplier<? extends T> supplier)
Создает локальную переменную потока.
|
public ThreadLocal()
withInitial(java.util.function.Supplier)
protected T initialValue()
get()
метод, если поток, ранее вызванный set(T)
метод, когда initialValue
метод не будет вызван для потока. Обычно, этот метод вызывается самое большее однажды на поток, но это может быть вызвано снова в случае последующих вызовов remove()
сопровождаемый get()
. Эта реализация просто возвращается null
; если программист требует, чтобы у локальных переменных потока было начальное значение кроме null
, ThreadLocal
должен быть разделен на подклассы, и этот переопределенный метод. Как правило, анонимный внутренний class будет использоваться.
public static <T> ThreadLocal<T> withInitial(Supplier<? extends T> supplier)
get
метод на Supplier
.supplier
- поставщик, который будет использоваться, чтобы определить начальное значениеNullPointerException
- если указанный поставщик является нулемpublic T get()
initialValue()
метод.public void set(T value)
initialValue()
метод, чтобы установить значения локальных переменных потока.value
- значение, которое будет сохранено в копии текущего потока этого локального для потока.public void remove()
initialValue()
метод, если его значение не устанавливается текущим потоком тем временем. Это может привести к многократным вызовам initialValue
метод в текущем потоке.
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92