Java,EJB,所有方法的并发锁

时间:2012-11-14 21:25:02

标签: java concurrency locking ejb

我有两个方法的EJB

@Singleton(name = "RatingCalculatorEJB")
public class RatingCalculatorBean {

    public void countRating() {}

    public void countRating(int someID) {}
}

默认情况下,所有方法都有并发锁:@ Lock(LockType.WRITE) 如果任何线程调用方法 - 另一个线程将等待调用此方法。

但是我需要更多 - 如果一个线程调用任何方法,那么调用EJB的任何方法的所有其他线程都应该等待。 我有办法吗?

@Stateless beans的相同问题

3 个答案:

答案 0 :(得分:9)

@ Lock(LockType.WRITE)锁定bean的所有EJB方法,因此它已经完成了你想要的。

无状态bean一次只处理一个客户端,因此并发应该很少成为问题。

答案 1 :(得分:1)

您可以尝试同步该方法。这样,一次只有一个线程可以访问该方法。

答案 2 :(得分:-1)

bean上的

@Lock(LockType.WRITE)不会锁定bean的所有方法。它与bean的每个方法上放置@Lock(LockType.WRITE)相同。

使用@Lock注释单例类指定单例的所有业务方法和任何超时方法都将使用指定的锁类型,除非它们使用方法级@Lock注释显式设置锁类型。如果单例类中不存在@Lock注释,则默认锁定类型@Lock(WRITE)将应用于所有业务和超时方法。