我有一个后续问题: EJB 3.1 container managed concurrency vs. synchronized
Lock是否仅阻止对持久性上下文等内的数据进行并发访问,还是为私有字段提供同步?
答案 0 :(得分:1)
最简单的想象是,容器在java.util.concurrent.ReadWriteLock
或lock()
上的方法调用周围调用unlock()
和readLock()
的每个bean writeLock()
{1}},具体取决于方法的已配置@Lock
。因此,实例变量受到保护。
但是,请注意,容器管理的@PersistenceContext
字段不是“共享”状态,因为容器实际上注入了代理对象。对该代理EntityManager
的每个方法调用都将委托给每个事务EntityManager
。由于事务不是跨线程共享的,因此即使bean使用@ConcurrencyManagement(BEAN)
而没有其他同步,它也是线程安全的。