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

Метод remove

Метод remove класса ThreadLocal удаляет значение переменной, хранящееся для текущего потока. После вызова этого метода последующий вызов get вернёт значение, полученное из метода initialValue, либо null, если метод initialValue не был переопределён. Метод не принимает параметров и не возвращает результата. Он особенно полезен для предотвращения утечек памяти в пулах потоков, когда поток завершает работу с ThreadLocal, но продолжает жить.

Синтаксис

threadLocal.remove()

Пример

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

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

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

"abcde" null

Пример

Давайте переопределим метод initialValue и проверим, что после remove возвращается начальное значение:

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

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

42 12345

Пример

Давайте покажем, что значения в разных потоках независимы, и remove влияет только на текущий поток:

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

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

before remove: thread after remove: null main value: main

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

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