作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 J2EE 很陌生,如果这是显而易见的,我深表歉意。我必须解决糟糕的数据库设计,该设计的更新无法安全地并行完成。解决此问题的最简单方法(目前)是在方法调用周围放置互斥保护以序列化其访问。
我知道您不能安全地仅在 J2EE 中的方法上使用同步关键字,因为容器可能会干扰。 J2EE 中是否有一种“受支持”的方法来在 EJB 中创建互斥体/信号量/锁,以确保对整个 J2EE 应用程序的方法访问进行序列化?
最佳答案
尝试使用静态对象作为互斥体,例如:
private static final Object mutex = new Object ();
public void someMethod() {
synchronized(mutex) {
// do work that must be globally synchronous
}
}
在方法本身上使用 synchronized
对您不起作用的原因是,Java EE 容器可能会创建多个 EJB 实例,但标记为 synchronized
的方法是仅针对每个实例进行保护(其中每个实例一次只能有一个线程执行同步
方法,但可以同时访问多个实例)。
关于java - 如何在 J2EE EJB 中创建互斥锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32899231/
我是一名优秀的程序员,十分优秀!