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 и/или его филиалы. Все права защищены.