Java EE:在这种情况下,让我的上下文属性是线程安全的是明智的吗?

时间:2011-05-06 20:05:43

标签: java servlets thread-safety servlet-3.0

我正在Servlet 3.0 API的帮助下为我的网站实现动态通知系统(Facebook)。我计划支持此功能的结构是:

  1. 在每个页面加载时,发送XMLHTTP“get” 请求服务器
  2. 允许服务器创建AsyncContext对象 从这些“获取”请求和存储 它们在应用程序范围的地图中 由用户的网站ID
  3. 键入
  4. 每当用户参与某个操作时 产生通知,查询 ID的应用程序作用域映射 用户的朋友,并使用 存储在那里的AsyncContext对象,发送 通知每个朋友。
  5. 每个朋友都收到了 通知。
  6. 我的问题是:是否有必要使这个地图线程安全?在最坏的情况下,代表“通知发送用户”的功能会将通知发送到地图中陈旧的异步上下文,因为用户对应当前正在切换页面并且还没有发送新的XMLHTTP请求,或已注销。

    然而,在每个页面加载时,我还有代码来检索比“上次检查日期”更新的数据库中的所有通知,因此在页面加载时,通知用户不依赖于动态通知系统。因此,如果用户正在切换页面,用户仍会收到通知(显然,如果用户退出,则通知的概念不相关)。

    鉴于此信息,是否有任何场景要求地图是线程安全的?

1 个答案:

答案 0 :(得分:2)

您可能不需要精确的一致性..但是您仍然不希望任何线程在写入时读取正常的hashmap(添加可能会导致重新散列并将获取线程置于无限循环中)。 / p>

此外,该计划不会超过1台服务器。如果没关系....只需使用ConcurrentHashMap。