Будет только один объект ThreadLocal. Каждый поток имеет лениво инициализированную карту значений всех инициализированных объектов ThreadLocal. Это означает, что только первый поток будет иметь дополнительный объект 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);
}