[英]How can I create a mutex in J2EE EJB
我是J2EE的新手,因此很抱歉。 我必须解决一个不良的数据库设计,该数据库设计具有无法并行安全地完成的更新。 解决此问题的最简单方法(目前)是在方法调用周围放置互斥保护,以序列化对其的访问。
我知道您不能安全地仅在J2EE中的方法上使用synced关键字,因为容器可能会干扰。 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
的方法仅基于每个实例受保护(每个实例只能有一个线程)一次执行synchronized
方法,但可以同时访问多个实例)。
只是为了繁荣,java.util.concurrent都被批准在容器内使用。 使用信号量进行阻止将在单个容器中进行,但是您将需要更高级别的同步来维护集群中的同步。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.