首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java @ApplicationScoped同步/异步访问

Java @ApplicationScoped同步/异步访问
EN

Stack Overflow用户
提问于 2014-10-20 19:49:08
回答 1查看 968关注 0票数 1

我想找一段时间,不知道CDI容器是如何对待@ApplicationScoped bean的。我是说-如果你有Session类的话:

代码语言:javascript
复制
@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)方法来实现这一点。

问题如下:

  1. 如果有人打电话把SessionUser放到地图上。其他通话是否暂停,直到第一次投球结束?(例如,我们同时有4个额外的调用-2个用于getSession方法,2个用于add方法)
  2. 如果有人打电话给getSession。其他同步通话是否也会暂停,直到通话结束?
  3. SynchronizedList和/或AtomicInteger (假设我们有整数列表,因为特定情况只是一个例子)是否改变了它?

这个问题的主要主题是:@ApplicationScoped真的可以“冻结”我的应用程序吗?因为我觉得这是一个真正的瓶颈,因为我不能像在EJB中那样使用@ConcurencyManagement锁。

EN

回答 1

Stack Overflow用户

发布于 2014-10-27 18:18:20

可以并发访问can上的方法。没有锁,没有瓶颈,但是您的代码可能会有重新进入的问题。

@ApplicationScoped上的方法必须是无状态的或对线程安全属性的访问:在您的示例中,您应该将HashMap更改为ConcurrentHashMap。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26473725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档