【发布时间】:2014-10-20 19:49:08
【问题描述】:
我正在寻找一段时间,无法弄清楚 CDI 容器如何处理 @ApplicationScoped bean。我的意思是 - 如果你有 Session 的课程,比如:
@ApplicationScoped
public class Session {
Map<User,Session> map = new HashMap<>();
public void add(User user,Session session) {
sessions.put(user,session);
}
public Session getSession(User user) {
return list.get(user);
}
}
每次用户登录时都会调用addSession(Session session, User user)方法。假设我们想要不时检索用户的会话——我们可以通过调用getSession(User user)方法来实现。
问题是:
如果某个呼叫将
Session和User放到地图上。在第一个推杆呼叫完成之前,是否会暂停其他呼叫? (例如,我们有额外的同时 4 个调用 - 2 个用于getSession方法,2 个用于add方法)如果某个呼叫试图拨打
getSession。其他同时通话是否也会暂停,直到完成?SynchronizedList和/或AtomicInteger(假设我们有整数列表,因为具体情况只是一个示例)是否改变了某些内容?
这个问题的主题是:@ApplicationScoped 真的可以“冻结”我的应用程序吗?因为我觉得这是一个真正的瓶颈,因为我不能像在 EJB 中那样使用 @ConcurencyManagement 锁。
【问题讨论】:
标签: jakarta-ee asynchronous concurrency containers cdi