# juc ## ThreadLocal 通过ThreadLocal api,可以存储对象,并且存储的对象只有指定线程才能够访问。 ### 示例 ```java // 声明一个ThreadLocal对象,其中存储的Integer值和特定线程绑定 ThreadLocal threadLocalVlaue = new ThreadLocal<>(); // 再特定线程中,调用get/set方法,可以对与该线程绑定 // 的integer值进行获取或设置 threadLocalValue.set(1); Integer result = threadLocalValue.get(); ``` ThreadLocal类似于一个map,其中key为线程,value为与线程绑定的值,再特定线程中调用 ### api #### withInitial 可以通过`ThreadLocal.withInitial`方法来构造一个带初始值的threadLocal对象,该静态方法接收一个supplier对象。 ```java ThreadLocal threadLocal = ThreadLocal.withInitial(() -> 1); ``` 如果一个ThreadLocal对象指定了withInitial方法,那么当该ThreadLocal对象get为空时,会调用withInitial并用该方法的返回值来初始化该threadLocal对象。 #### remove 如果要移除ThreadLocal中的对象,可以调用`remove`方法 ```java threadLocal.remove(); ```