How to initialize ThreadLocal objects in Java
java, static-block, thread-local
Solution
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>();
}
};
Problem
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 lasts the life of the thread, but I don't know if there's a way to initialize something per-thread in Java. E.g. what I want is something like: ``` ThreadLocal static { myThreadLocalVariable.set(new ArrayList<Whatever>()); } ``` So that it initializes it for every thread. I know I can do this: ``` private static Whatever getMyVariable() { Whatever w = myThreadLocalVariable.get(); if(w == null) { w = new ArrayList<Whatever>(); myThreadLocalVariable.set(w); } return w; } ``` but I'd really rather not have to do a check on that every time it's used. Is there anything better I can do here?