РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1048 of 1163 menu

Метод set

Метод set класса ThreadLocal устанавливает значение, которое будет привязано к текущему потоку. Каждый поток хранит свою собственную копию значения, поэтому данные, установленные в одном потоке, не видны другим потокам. В первый параметр мы передаем значение, которое хотим сохранить для текущего потока. Метод не возвращает результат.

Метод set полезен, когда нужно хранить данные, специфичные для каждого потока, не используя синхронизацию. Типичные примеры - хранение пользовательской сессии, контекста транзакции или форматтеров, которые не являются потокобезопасными.

Синтаксис

threadLocal.set(value)

Пример

Давайте установим значение в ThreadLocal из главного потока и прочитаем его с помощью метода get:

public class Main { public static void main(String[] args) { ThreadLocal<String> tl = new ThreadLocal<>(); tl.set("abcde"); System.out.println(tl.get()); } }

Результат выполнения кода:

"abcde"

Пример

Давайте покажем, что значение, установленное в одном потоке, не видно другому потоку:

public class Main { public static void main(String[] args) throws InterruptedException { ThreadLocal<String> tl = new ThreadLocal<>(); tl.set("main"); Thread thread = new Thread(() -> { System.out.println(tl.get()); tl.set("child"); System.out.println(tl.get()); }); thread.start(); thread.join(); System.out.println(tl.get()); } }

Результат выполнения кода:

null "child" "main"

Пример

Давайте установим значение с помощью set и затем удалим его методом remove, чтобы убедиться, что get вернет null:

public class Main { public static void main(String[] args) { ThreadLocal<Integer> tl = new ThreadLocal<>(); tl.set(12345); System.out.println(tl.get()); tl.remove(); System.out.println(tl.get()); } }

Результат выполнения кода:

12345 null

Смотрите также

  • класс ThreadLocal,
    который хранит данные для каждого потока
  • метод get,
    который возвращает значение текущего потока
  • метод remove,
    который удаляет значение текущего потока
  • метод currentThread,
    который возвращает текущий поток
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить