On 18/11/14 05:11, Bernd Eckenfels wrote:
.... What do you think? (code from OpenJDK 8:)179 private T setInitialValue() { 180 T value = initialValue(); 181 Thread t = Thread.currentThread(); 182 ThreadLocalMap map = getMap(t); 183 if (map != null) 184 map.set(this, value); 185 else +++ if (value != null) 186 createMap(t, value); 187 return value; 188 }
Interesting idea. If this was to be the case woultn't multiple get() invocations cause multiple initialValue() invocations?
I think storing the null is important to obey the initialValue / remove contract, i.e. initialValue method is invoked at most once per thread, but it may be invoked again in case of subsequent invocations of remove() followed by get().
-Chris.
