Synchronization Java、EJB、私有字段的锁同步?
我有一个后续问题要问:Synchronization Java、EJB、私有字段的锁同步?,synchronization,locking,ejb-3.1,Synchronization,Locking,Ejb 3.1,我有一个后续问题要问: 锁是否仅阻止对持久性上下文中的数据的并发访问,等等?还是它还为私有字段提供同步?最容易想象的是,容器在其上调用Lock()和unlock()的是一个per beanjava.util.concurrent.ReadWriteLock根据为方法配置的@Lock,在readLock()或writeLock()上调用方法。因此,实例变量受到保护 但是,请注意,容器管理的@PersistenceContext字段不是“共享”状态,因为容器实际上注入了代理对象。该代理Entity
锁是否仅阻止对持久性上下文中的数据的并发访问,等等?还是它还为私有字段提供同步?最容易想象的是,容器在其上调用
Lock()
和unlock()的是一个per beanjava.util.concurrent.ReadWriteLock
根据为方法配置的@Lock
,在readLock()
或writeLock()
上调用方法。因此,实例变量受到保护
但是,请注意,容器管理的
@PersistenceContext
字段不是“共享”状态,因为容器实际上注入了代理对象。该代理EntityManager
上的每个方法调用都将委托给每个事务EntityManager
。由于事务不是跨线程共享的,因此即使bean在没有其他同步的情况下使用@ConcurrencyManagement(bean)
,它也是线程安全的。最容易想象的是,存在一个每个beanjava.util.concurrent.ReadWriteLock
,容器在其上调用lock()
和unlock())
根据为方法配置的@Lock
,在readLock()
或writeLock()
上调用方法。因此,实例变量受到保护
但是,请注意,容器管理的@PersistenceContext
字段不是“共享”状态,因为容器实际上注入了代理对象。该代理EntityManager
上的每个方法调用都将委托给每个事务EntityManager
。由于事务不是跨线程共享的,因此即使bean在没有其他同步的情况下使用@ConcurrencyManagement(bean)
,它也是线程安全的