- 有时可能要避免共享变量,使用
ThreadLocal
辅助类为各个线程提供各自的实例。例如,SimpleDateFormat
类不是线程安全的。可以这样处理:
public class ThreadLocalTest {
public static final ThreadLocal<SimpleDateFormat> dateFormat =
ThreadLocal.withInitial(()->new SimpleDateFormat("yyyy-MM-dd"));
public static void main(String[] args) {
String dateStamp = dateFormat.get().format(new Date());
}
}
withInitial
创建一个局部变量,其初始值通过调用给定的supplier
生成,上面代码中使用的是Lambda
表达式。get
得到这个线程的当前值,如果是首次调用get
,会调用initialize
来得到这个值。