|
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