Почему ThreadLocal нужно чистить после использования?
ThreadLocal удобен, когда значение должно быть привязано к конкретному потоку:
private static final ThreadLocal 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 | #совет
ThreadLocal удобен, когда значение должно быть привязано к конкретному потоку:
private static final ThreadLocal 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 | #совет