У програмуванні ми визначаємо параметри методу для передачі вмісту змінних, якщо рівень методу виконання глибокий, то кожен метод має визначити параметри для передачі, на цей момент деякі змінні можна передавати через ThreadLocal, якщо всі методи виконуються на одному потоку, значення ThreadLocal можна встановити і прочитати.
Клас ThreadLocal використовується для надання локальних змінних всередині потоку. Коли ці змінні доступні (get/set) у багатопотоковому середовищі, змінні в кожному потоці є відносно незалежними від змінних в інших потоках.
ThreadLocal спочатку отримає поточний потік (Thread t = Thread.currentThread()) під час виконання методу набору, і використовує поточний потік для отримання ThreadLocalMap; якщо карта не є порожньою, це означає, що поточний потік має раніше зв'язану карту, потім оновить значення цієї карти, якщо ні — використати себе як ключ для внесення значення у карту, щоб реалізувати зв'язування змінних і потоків.
Тестуйте код, встановіть пул потоків так, щоб підтримувати максимум 5 потоків, і коли ми викликаємо метод отримання ThreadLocal у випадку багатопотокності, отримаємо дані ThreadLocal (Дані набираються іншими потоками), насМетод набору ThreadLocal не викликається на поточному потоку для встановлення даних, як показано на рисунку нижче:
Причини помилок:Після повторного використання потоку, ймовірно, перше значення, отримане з ThreadLocal, є значенням, що залишилося від інших попередніх потоків。
Бо після того, як ми закінчимо з ThreadLocal у поточній темі,Обов'язково зателефонуйте в службу видалення на своєчасне очищення。 Як показано нижче:
Код:
(Кінець)
|