当在类级别为 LockType READ 的单例容器管理会话 bean 中的 LockType WRITE 方法调用 LockType READ 的同一 bean 中的另一个方法时会发生什么。
@Singleton
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
@Lock(LockType.READ)
public class EmployeBean implements Employee {
@Lock(LockType.WRITE)
public Employee update() {
//update
}
public void calculate () {
//calculate and set
}
}
使用上面的bean,有这样的实现是否正确?当这个 update() 正在执行并且同时一些其他服务调用 calculate() 时会发生什么?服务会等到 update() 完成还是它还并行执行 calculate()?我相信如果它确实并行执行,它很有可能破坏数据或以数据不匹配告终。
计算方法可以设为私有,并且只能在受 WRITE 保护的方法下使用。这样可以确保不会因为并发请求而出现不匹配。
想知道在上述情况下处理并发请求的影响并遵循正确的方法。