java - 如何在 J2EE EJB 中创建互斥锁

标签 java multithreading jakarta-ee synchronization

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

相关文章:

java - 调整 Eclipse 动态 Web 项目以在真实服务器中拥有站点的步骤

java - 对目录结构有点困惑

java - 在java中无需打开浏览器即可检查url是否存在

java - 没有 Java 编程经验的系统开发人员可以编写 Android 应用程序吗?

c - 如何控制具有多个互斥锁和条件的线程?

Python requests.get 持续超时大约一分钟,然后继续正常工作

java - 无法将项目列表发送到后端以从列表中删除

java - 定时器执行错误

java - 用 java 编写这个 python 结构

multithreading - 具有快速元素删除和随机获取的线程安全可变集合