Gets the value in the current thread's copy of this
thread-local variable or replaces the value with the result of calling
default function in case if that value was
If the variable has no value for the current thread,
it is first initialized to the value returned
by an invocation of the ThreadLocal.initialValue method.
Then if it is still
null, the provided default function is called and its result
is stored for the current thread and then returned.