Java 如果我的值存储在线程安全映射中,那么该值是否需要为ThreadLocal?
我将对象存储在Java 如果我的值存储在线程安全映射中,那么该值是否需要为ThreadLocal?,java,multithreading,spring,spring-transactions,Java,Multithreading,Spring,Spring Transactions,我将对象存储在ThreadLocalMap(在spring tx中实现) 类事务同步管理器。。。 私有静态本地资源= 新命名的线程本地(“事务资源”); 如果映射是ThreadLocal并且被正确访问(同样是所有spring tx代码),那么我存储在映射中的值必须是ThreadLocal才能保证线程安全吗?假设您没有通过其他方式无意中将映射传递给另一个线程,映射不需要任何额外的保护,因为它的所有用途都是单线程的。同样,只要映射中的任何对象没有通过其他方式无意中传递给其他线程,这些对象就不需要任
ThreadLocal
Map
(在spring tx中实现)
类事务同步管理器。。。
私有静态本地资源=
新命名的线程本地(“事务资源”);
如果映射是
ThreadLocal
并且被正确访问(同样是所有spring tx代码),那么我存储在映射中的值必须是ThreadLocal才能保证线程安全吗?假设您没有通过其他方式无意中将映射传递给另一个线程,映射不需要任何额外的保护,因为它的所有用途都是单线程的。同样,只要映射中的任何对象没有通过其他方式无意中传递给其他线程,这些对象就不需要任何额外的保护。如果是线程本地的,为什么需要同步呢?@DaveNewton我不是说关键字意义上的synchronized
,或者我是说。。。映射不是我的实现,我只是在其中添加值,我只是试图传达对映射本身的所有访问都是线程安全的,哪些线程正在访问映射?这取决于您如何处理映射中的对象。例如,如果您有一个以线程安全方式检索的映射引用,那么如何修改该引用?线程安全映射中的对象不是线程安全的,对映射的访问是线程安全的。
class TransactionSynchronizationManager ...
private static final ThreadLocal<Map<Object, Object>> resources =
new NamedThreadLocal<Map<Object, Object>>("Transactional resources");