Почему бы не использовать ConcurrentHashMap
?
Основная причина - производительность. Использование потокобезопасной карты значительно медленнее, чем использование пользовательской карты без потоковой безопасности.
Вторичная причина заключается в том, что Map<Thread,T>
будет сохранять ссылку на поток и значение до тех пор, пока ThreadLocal
существует, и они часто используются в качестве статики.
Веселая третья причина в том, что я могу создать Thread
с переопределенными equals
и hashCode
, который ведет себя непослушно.
Является ли ThreadLocal.set
поточно-ориентированным?
Не должно быть. Первая строка:
Thread t = Thread.currentThread();
Все остальное делается на Thread
t
. Все эти операции могут быть выполнены только из этого точного потока.