如果我需要一个变量的 ThreadLocal,是否还需要使用 Supplier(也是线程安全的)?
例如,Supplier 是否不需要在这里实现线程安全?
private ThreadLocal<Supplier<MyClass>> myObject = new ThreadLocal<Supplier<MyClass>>();
谢谢。
最佳答案
您的问题没有显示将 Supplier 与 ThreadLocal 一起使用的典型方法。如果您想要 MyClass 的 ThreadLocal,旧的(1.8 之前的)方法通常是:
ThreadLocal<MyClass> local = new ThreadLocal<MyClass>();
// later
if (local.get() == null) {
local.put(new MyClass());
}
MyClass myClass = local.get();
另一种方法是 delcare ThreadLocal
的子类,它覆盖了 initialValue
方法。
在 1.8 中,您可以改为使用 Supplier 来处理该初始化:
ThreadLocal<MyClass> local = ThreadLocal.withInitial(() -> new MyClass());
在功能上,这两者基本相同,但 Supplier 版本要编写的代码少很多。
关于java - ThreadLocal 供应商?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31547124/