java - ThreadLocal 供应商?

标签 java java-8

如果我需要一个变量的 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/

相关文章:

java - 从同一个类重写同一个方法两次

java - startActivity() 不启动 Activity

java - WildFly 8.2.0 和 Infinispan 6.0.2 CacheContainer 注入(inject)错误

java - 如何在 kafka 中初始化 kafka ConsumerRecords<String,String> 进行测试

java - 使用 lambda 表达式反转字符串中的单词

java - 为什么Java具有 “String”类型而不是 “string”?

java - 用日期强制 TimSort IllegalArgumentException

java - 从 lambda 调用默认方法

java - 进程 'command '/Applications/Android Studio 3.0.1.app/Contents/jre/jdk/Contents/Home/bin/java'' 以非零退出值 1 完成

php - 结构\H、\V 和\N 是什么意思?