如果我的值存储在线程安全映射中,那么值是否必须是ThreadLocal?

时间:2015-06-02 15:01:25

标签: 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");

如果Map是ThreadLocal并且已正确访问(同样是所有spring-tx代码),那么我在地图中存储的值必须是ThreadLocal才能是线程安全的吗?

1 个答案:

答案 0 :(得分:2)

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