繁体   English   中英

如何在J2EE EJB中创建互斥锁

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM