我在这里阅读线程本地的JavaDoc
https://docs.oracle.com/javase/1.5.0/docs/api/java/lang/ThreadLocal.html
它说"ThreadLocal实例通常是类中的私有静态字段,它们希望将状态与线程(例如,用户ID或事务ID)相关联。“
但我的问题是,为什么他们选择将其设置为静态的(通常)-这会使事情变得有点混乱,因为有“每个线程”的状态,但字段是静态的?
发布于 2010-05-07 04:01:12
因为如果它是一个实例级字段,那么它实际上应该是"Per Thread - Per Instance",而不仅仅是一个保证的"Per Thread“。这通常不是您要寻找的语义。
通常,它包含一些对象,这些对象的作用域是用户对话、Web请求等。您不希望它们也被作用子作用域到类的实例。
一个web请求=>一个持久化会话。
没有一个web请求=>每个对象一个持久化会话。
发布于 2012-02-07 15:12:48
要么让它成为静态的,要么如果你试图避免在你的类中有任何静态字段--让类本身成为一个单例,然后你就可以安全地使用一个实例级的ThreadLocal,只要你拥有全局可用的单例。
发布于 2010-05-07 07:58:33
这并不是必须的。重要的是它应该是单例的。
https://stackoverflow.com/questions/2784009
复制相似问题