java - 关于使用 ThreadLocals 包装可变单例对象的建议

标签 java multithreading thread-local

来自 Java Concurrency in practice第 3.3.3 章。 线程本地

Thread-local variables are often used to prevent sharing in designs based on mutable Singletons or global variables.

如果我们将可变的 Singleton 人包装在 ThreadLocal 中,每个线程都会有自己的 Singleton 副本?那么它将如何保持单例?这是作者的意思还是我在这里遗漏了一些非常明显的东西?

最佳答案

If we wrap the mutable Singleton guy in a ThreadLocal

据我所知,您没有使用 ThreadLocal 包装单例类,但是单例中包含的对象是可变 或非线程安全的。正如示例正确讨论的那样,JDBC 连接 不是线程安全的,需要额外的保护,这反过来会增加争用。

因此,在单例仅用于共享目的的情况下,将这些东西替换为 ThreadLocal 是一个好主意,因为所有线程都有自己的连接,不需要额外的保护。

ThreadLocal 的另一个用例是Random generation,如果只有一个Random 对象,那么线程内部就会争用“seed” ,所以如果每个线程都有自己的 Random 对象,那么就不再存在争用,这是有道理的。

关于java - 关于使用 ThreadLocals 包装可变单例对象的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14786723/

相关文章:

java - ThreadLocal + java.sql.Connection + servlet 过滤器 = 2009?

java - MTN 移动货币整合

java - 客户端代码中包含 java.util.List 时的 Gin 问题

java - 多线程 ByteBuffers 比顺序慢?

用于创建类生成线程的多个实例的 C++ 线程模型

java - 在tomcat的线程池中,当线程返回池时,线程本地值是否会重置或删除?

java - 将线程安全对象放在 ThreadLocal 上有什么好处吗?

java - 运行 Activity 之间的沟通?

java - 能够在 RecyclerView 中同时点击两个项目

Java 线程安全 - 多个原子操作?