Интересный вопрос.Как объяснил Tom Hawtin - tackline , вы в основном создаете экземпляры ThreadLocal<String>()
.Теперь давайте посмотрим, как ThreadLocal
на самом деле хранит значения (упрощенно):
public void set(T value) {
ThreadLocalMap map = getMap(Thread.currentThread());
map.set(this, value);
}
Требуется какая-то карта, которая привязана к каждому потоку и устанавливает значение с помощью this
(сам) в качестве ключа.Это означает, что если у вас есть два ThreadLocals
(созданные разными загрузчиками классов), они имеют различную ссылку this
, тем самым эффективно сохраняя разные значения.
В целом - вы не можете, например, использовать ThreadLocal
какОбходной путь к локальным синглтонам загрузчика классов и созданию локальных потоков.