我是J2EE的新手,所以如果这很明显的话,我很抱歉。我必须解决一个糟糕的数据库设计,它的更新不能安全地并行完成。修复这个问题的最简单方法(目前)是在方法调用周围放置互斥保护,以序列化它的访问。
我知道您不能安全地在J2EE中的方法上使用同步关键字,因为容器可能会产生干扰。在J2EE中是否有一种“受支持”的方法来在EJB中设置互斥/信号量/锁,以确保对方法的访问针对整个J2EE应用程序进行序列化?
发布于 2016-06-14 04:06:50
仅仅为了繁荣,java.util.concurrent都被批准在容器内使用。使用信号量阻塞将在单个容器内工作,但您需要更高级别的同步来维护集群中的同步。
发布于 2015-10-02 01:46:42
例如,尝试使用静态对象作为互斥对象:
private static final Object mutex = new Object ();
public void someMethod() {
synchronized(mutex) {
// do work that must be globally synchronous
}
}在方法本身上使用synchronized的原因是Java容器可能创建多个EJB实例,但是标记为synchronized的方法仅在每个实例的基础上受到保护(每个实例一次只能有一个线程执行synchronized方法,但可以并发访问多个实例)。
https://stackoverflow.com/questions/32899231
复制相似问题