如果使用EJB3 Singleton会话Bean,没有必要使用ConcurrentHashMap状态变量 - 是否正确?我可以使用一个由Container Concurrency Manager管理的常规HashMap吗?
答案 0 :(得分:3)
这是正确的。如果没有指定其他内容,默认情况下,singleton会话bean使用容器管理的并发。此外,如果未指定,则默认情况下每个business和timeout方法都具有LockType.WRITE。结果是没有多个线程同时在单例中执行方法,因此使用常规java.util.HashMap是完全正常的。
答案 1 :(得分:3)
对于所有方法,默认值为@ConcurrencyManagement(CONTAINER)
且@Lock(WRITE)
,由于所有方法调用都将阻止等待写锁定,因此不会像ConcurrentHashMap
一样精确缩放。您可以使用@Lock(READ)
和ConcurrentHashMap
来允许多个线程,但此时,您也可以使用@ConcurrencyManagement(BEAN)
来完全摆脱容器管理的并发。