How to initialize ThreadLocal objects in Java

后端 未结 3 1478
猫巷女王i
猫巷女王i 2020-12-06 04:21

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

相关标签:
3条回答
  • 2020-12-06 04:43

    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>();
            }
        };
    
    0 讨论(0)
  • 2020-12-06 04:47

    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);
    
    0 讨论(0)
  • 2020-12-06 05:04

    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.

    0 讨论(0)
提交回复
热议问题