ThreadLocal в Java

Класс java.lang.ThreadLocal<T> используется для хранения переменных, которые должны быть доступны для всего потока. Фактически это нечто вроде ещё одной области видимости переменных. Класс ThreadLocal  имеет методы get  и set, которые позволяют получить текущее значение и установить новое значение.

Обычно экземпляры ThreadLocal  объявляются как приватные статические переменные в классе. Каждый поток получает из метода get своё значение и устанавливает через set тоже своё значение, изолированное от других потоков.

Про ThreadLocal  любят спрашивать на собеседованиях в дополнение к вопросам многопоточности и её проблем.

Пример:

Для чего можно использовать ThreadLocal  в Java:

  • Хранение информации о пользователе и его правах доступа, что позволит не передавать её в качестве аргумента в каждый класс или метод.
  • Можно использовать ThreadLocal  для кеширования непотокобезопасных ресурсов вроде SimpleDateFormat.
  • Различные счётчики обращений для потоков.

Имейте в виду, что ThreadLocal гарантирует лишь то, что каждый поток получит ссылку на свой объект, но он не изолирует сами объекты. Если два разных потока положат в ThreadLocal один и тот же объект, то при доступе к нему будут возникать все проблемы многопоточности.

ThreadLocal в Java: 2 комментария

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *