Вопрос объясняет назначение ThreadLocal и его применение для хранения данных, специфичных для потока.
ThreadLocal позволяет хранить данные, которые доступны только одному потоку. Пример: хранение идентификатора пользователя в веб-запросе.
Особенности ThreadLocal:
Каждый поток имеет свою копию переменной.
Значения не передаются между потоками.
Пример использования:
Хранение контекста в веб-приложении:
private static final ThreadLocal<String> userId = new ThreadLocal<>();
void handleRequest(String user) {
userId.set(user); // Устанавливаем для текущего потока
processRequest();
}
void processRequest() {
System.out.println("User: " + userId.get()); // Получаем для текущего потока
userId.remove(); // Очищаем после использования
}Для безопасности в многопоточности:
Объекты, которые не являются потокобезопасными (например, SimpleDateFormat), можно хранить в ThreadLocal.
Когда использовать:
Для данных, которые должны быть изолированы между потоками.
В контексте одного запроса (например, Spring Security).