Вопрос проверяет способность осознанно применять ThreadLocal, а не использовать его «по привычке».
ThreadLocal имеет смысл использовать, когда данные должны быть доступны в рамках одного потока.
При этом данные не должны передаваться между потоками.
Это позволяет избежать синхронизации.
Часто применяется для контекста выполнения.
Использовать его стоит осторожно.
ThreadLocal — это специализированный инструмент, подходящий не для всех сценариев.
Использование оправдано, если:
данные логически принадлежат потоку
отсутствует возможность передать их через параметры
требуется избежать блокировок
Типичные примеры:
SecurityContext
TransactionContext
RequestId для логирования
для передачи данных между потоками
в бизнес-логике
как замену параметров методов
В ExecutorService:
потоки переиспользуются
старые значения могут «утечь» в новые задачи
Поэтому важно:
try {
threadLocal.set(value);
// логика
} finally {
threadLocal.remove();
}
ThreadLocal полезен для инфраструктурных задач и контекста, но опасен при неправильном использовании.