ThreadLocal的initialValue()方法与set()方法的区别在于:

huangapple go评论89阅读模式
英文:

ThreadLocal initialValue() vs set()

问题

我理解 ThreadLocal 类的目的;但对于 initialValue()set() 方法感到有些困惑。

对我来说,两者似乎具有相同的目的 - 将值设置到 ThreadLocal 对象,以便每个线程都可以获得自己的副本。

无论是使用 initialValue() 还是 set() 来设置值,您始终可以通过调用 get() 方法来获取值。

您可以通过调用 remove() 方法来删除值。

  1. 我们什么时候需要使用 initialValue() 方法?
  2. 我们什么时候需要使用 set() 方法?
英文:

I understand the purpose of ThreadLocal class; but bit baffled by the methods initialValue() and set().
To me, both seems to be having the same purpose - to set the value to the ThreadLocal object so that each thread will get its own copy.

Regardless of whether initialValue() or set() is used to set the value, you always get the value by calling the get() method.

You can remove the value by calling the remove() method.

  1. When do we need to use the initialValue() method?
  2. When do we need to use the set() method?

答案1

得分: 2

首先,initValue() 是一个 protected 方法,这意味着你不能在 ThreadLocal 类外部或其子类中使用它。它只有一个目的,正如它的名字所示,提供初始值,仅在初始化时被调用一次。

如果你查看这个类,你会发现在内部,initValue() 总是返回 null,除非你使用 ThreadLocal.withInitial(Supplier supplier) 提供了一个 Supplier,或者在你自己扩展的 ThreadLocal 中重写了这个方法。

详细信息请阅读文档。文档总是有帮助的:

https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadLocal.html

希望能对你有所帮助!编码愉快。

英文:

First of all, initValue() is a protected method, which means you can not use it outside the ThreadLocal class or it's children. It serves one purpose only, which it's name suggests, to provide initial value and is invoked only once.

If you look at the class, you'll find that internally, initValue() always returns null unless you provide a Supplier with ThreadLocal.withInitial(Supplier supplier) or override this method in your own extension of ThreadLocal.

Do read the docs for details. They always help-

https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadLocal.html

Hope this helps! Happy coding.

huangapple
  • 本文由 发表于 2020年7月23日 13:32:03
  • 转载请务必保留本文链接:https://go.coder-hub.com/63047478.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定