getOrSet
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 null
.
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.