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