I\'m having an issue where I\'m creating a ThreadLocal and initializing it with new ThreadLocal . The problem is, I really conceptually just want a persistent list that last
You just override the initialValue()
method:
private static ThreadLocal<List<String>> myThreadLocal =
new ThreadLocal<List<String>>() {
@Override public List<String> initialValue() {
return new ArrayList<String>();
}
};
The accepted answer is outdated in JDK8. This is the best way since then:
private static final ThreadLocal<List<Foo>> A_LIST =
ThreadLocal.withInitial(ArrayList::new);
Your solution is fine. A little simplification:
private static Whatever getMyVariable()
{
Whatever w = myThreadLocalVariable.get();
if(w == null)
myThreadLocalVariable.set(w=new Whatever());
return w;
}
In Java 8, we are able to do:
ThreadLocal<ArrayList<Whatever>> myThreadLocal = ThreadLocal.withInitial(ArrayList::new);
which uses the Supplier<T> functional interface.