我将对象存储在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才能是线程安全的吗?
答案 0 :(得分:2)
假设您没有通过其他方式无意中将Map传递给另一个线程,Map不需要任何额外的保护,因为它的所有用法都是单线程的。同样,只要Map中的任何对象都不会通过其他方式无意中传递给其他线程,那些对象就不需要任何额外的保护。