ThreadLocal удобен, когда значение должно быть привязано к конкретному потоку:private static final ThreadLocal<String> USER_ID =
new ThreadLocal<>();
Например, в начале обработки запроса можно сохранить id пользователя:
USER_ID.set("user-42");А ниже по коду достать его без передачи через каждый метод:
String userId = USER_ID.get();
Но в серверных приложениях потоки часто переиспользуются пулом.
Если значение не удалить, следующий запрос может попасть на тот же поток и увидеть старые данные.
Поэтому после работы важно очищать
ThreadLocal:try {
USER_ID.set(userId);
handleRequest();
} finally {
USER_ID.remove();
}finally нужен, чтобы очистка сработала даже при исключении.👉 Java Ready | #совет
