Будет только один объект ThreadLocal. Каждый поток имеет лениво инициализированную карту значений всех инициализированных объектов ThreadLocal. Это означает, что только первый Thread будет иметь дополнительный объект Map с одним значением, и ничто не изменится для второго потока.
См ThreadLocal.setInitialValue() для информации:
private T setInitialValue() {
T value = initialValue();
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null)
map.set(this, value);
else
createMap(t, value);
return value;
}
и ThreadLocal.set():
public void set(T value) {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null)
map.set(this, value);
else
createMap(t, value);
}
Отличный ответ. Благодаря! – Gili