Метод get
Метод get класса ThreadLocal возвращает
значение, которое было установлено для текущего потока
с помощью метода set. Если для текущего потока
значение ещё не было установлено, метод возвращает
значение, заданное при создании объекта через
withInitial, либо null, если начальное
значение не задавалось. Метод не принимает параметров
и возвращает объект типа T.
Синтаксис
threadLocal.get()
Пример
Давайте создадим ThreadLocal с начальным
значением и получим его для главного потока:
public class Main
{
public static void main(String[] args)
{
ThreadLocal<String> tl = ThreadLocal.withInitial(() -> "abcde");
String res = tl.get();
System.out.println(res);
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте установим своё значение для потока и получим
его через метод get:
public class Main
{
public static void main(String[] args)
{
ThreadLocal<Integer> tl = new ThreadLocal<>();
tl.set(12345);
Integer res = tl.get();
System.out.println(res);
}
}
Результат выполнения кода:
12345
Пример
Давайте проверим, что каждый поток видит только своё значение. Создадим два потока, каждый из которых установит своё значение и прочитает его:
public class Main
{
public static void main(String[] args) throws InterruptedException
{
ThreadLocal<String> tl = new ThreadLocal<>();
Thread t1 = new Thread(() -> {
tl.set("abcde");
System.out.println("t1: " + tl.get());
});
Thread t2 = new Thread(() -> {
tl.set("12345");
System.out.println("t2: " + tl.get());
});
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println("main: " + tl.get());
}
}
Результат выполнения кода:
t1: abcde
t2: 12345
main: null
Смотрите также
-
класс
ThreadLocal,
который хранит значения, привязанные к потоку -
метод
set,
который устанавливает значение для текущего потока -
метод
remove,
который удаляет значение текущего потока -
класс
Thread,
который представляет поток выполнения