В программировании мы определяем параметры метода для передачи содержимого переменных, если уровень метода исполнения глубокий, то каждый метод должен определить параметры для передачи; в данный момент некоторые переменные можно передавать через ThreadLocal, при условии, что все методы выполняются на одном потоке, значение ThreadLocal можно задать и прочитать.
Класс ThreadLocal используется для предоставления локальных переменных внутри потока. Когда эти переменные используются (get/set) в многопоточной среде, переменные в каждом потоке относительно независимы от переменных в других потоках.
ThreadLocal сначала получает текущий поток (Thread t = Thread.currentThread()) при выполнении метода множества, и использует текущий поток для получения ThreadLocalMap; если карта не пуста, это значит, что текущий поток имеет ранее связанное отображение, затем обновляет значение этой карты, если нет, использует себя как ключ для внесения значения в карту, чтобы реализовать связывание переменных и потоков.
Проверьте код, установите пул потоков так, чтобы поддерживать максимум 5 потоков, и когда мы вызовем метод ThreadLocal get в случае многопоточности, получим данные ThreadLocal (Данные, набранные другими потоками), usМетод множества ThreadLocal не вызывается в текущем потоке для установки данных, как показано на рисунке ниже:
Причины ошибок:После повторного использования потока, скорее всего, первое значение, полученное из ThreadLocal, является значением, оставшимся от предыдущих потоков。
Потому что, после того как мы закончим с ThreadLocal в текущей теме,Обязательно позвоните в отдел удаления для своевременной очистки。 Как показано ниже:
Код:
(Конец)
|