如果我需要一个变量的ThreadLocal,是否还需要使用Supplier(也是线程安全的)?
例如,供应商在这里不需要完成线程安全吗?
private ThreadLocal<Supplier<MyClass>> myObject = new ThreadLocal<Supplier<MyClass>>();
Run Code Online (Sandbox Code Playgroud)
谢谢.
Sbo*_*odd 14
您的问题没有显示将供应商与ThreadLocal一起使用的典型方法.如果你想要一个MyClass的ThreadLocal,那么旧的(1.8之前的)方法通常是:
ThreadLocal<MyClass> local = new ThreadLocal<MyClass>();
// later
if (local.get() == null) {
local.put(new MyClass());
}
MyClass myClass = local.get();
Run Code Online (Sandbox Code Playgroud)
另一种方法是delcare一个子类ThreadLocal
,覆盖该initialValue
方法.
在1.8中,您可以使用Supplier来处理初始化:
ThreadLocal<MyClass> local = ThreadLocal.withInitial(() -> new MyClass());
Run Code Online (Sandbox Code Playgroud)
从功能上讲,这两者基本相同,但供应商版本的代码要少得多.