我对 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/