java - 如果我的值存储在线程安全映射中,该值是否需要是 ThreadLocal?

标签 java multithreading spring spring-transactions

我将对象存储在 ThreadLocal Map 中(在 spring-tx 中实现)

class TransactionSynchronizationManager ...

private static final ThreadLocal<Map<Object, Object>> resources =
        new NamedThreadLocal<Map<Object, Object>>("Transactional resources");

如果映射是ThreadLocal并且正确访问(同样是所有spring-tx代码),我存储在映射中的值是否必须是ThreadLocal才能保证线程安全?

最佳答案

假设您没有通过其他方式无意中将 Map 传递给另一个线程,则 Map 不需要任何额外的保护,因为它的所有使用都将是单线程的。同样,只要Map中的任何对象没有通过其他方式无意中传递给其他线程,这些对象就不需要任何额外的保护。

关于java - 如果我的值存储在线程安全映射中,该值是否需要是 ThreadLocal?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30599719/

相关文章:

java - 如何根据 HTTP header 值在 RestController 之间切换?

java - 如何确定我的 OpenJDK 库中使用的 xerces 版本?

java - Java中如何实现多线程

java - Spring Boot 最新 1.2.0.RELEASE 在启动时返回 ArrayStoreException

java - java中的无限while循环

java - 如何检查字符数组中的每个字符?

java - 吞吐量的 HTTP 客户端 - Netty 与 Apache HttpAsyncClient

multithreading - 处理乱序执行

java - 您将如何处理将来可能不同的两个相同的值对象?

Java Spring REST API 状态 400 对 POST/PUT 的响应