JavaEE : Is is it wise to make my context attribute thread-safe in this scenario?

标签 java servlets thread-safety servlet-3.0

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

  1. 在每次页面加载时,发送 XMLHTTP“get” 向服务器请求
  2. 允许服务器创建 AsyncContext 对象 从这些“获取”请求并存储 它们位于应用程序范围的映射中 由用户的网站 ID 键入
  3. 每当用户执行某项操作时 产生通知,查询 应用程序范围的 ID 映射 用户的 friend ,并使用 AsyncContext对象存储在那里,发送 给每个 friend 的通知。
  4. 每个 friend 都会收到 通知。

我的问题是:是否有必要使这个 map 线程安全?在最坏的情况下,代表“通知发送用户”的函数会将通知发送到 map 中的陈旧异步上下文,因为它对应的用户当前正在切换页面并且尚未切换发送新的 XMLHTTP 请求,或已注销。

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

根据这些信息,是否存在需要映射线程安全的场景?

最佳答案

您可能不需要精确的一致性..但您仍然不希望任何线程在写入时读取正常的 HashMap (添加可能会导致重新哈希并使获取线程陷入无限循环)。

此外,该计划无法很好地扩展到超过 1 个服务器。如果可以的话...只需使用 ConcurrentHashMap 即可。

关于JavaEE : Is is it wise to make my context attribute thread-safe in this scenario?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5916464/

相关文章:

java - Apache http 客户端 : request does not get redirected

javascript - Java servlet 和 javascript get 请求 : multiple requests to the same servlet, 更新了游戏状态

c# - List<T> 的线程安全,只有一个 Writer,没有 Enumerators

design-patterns - 为什么这个单例构造代码不是线程安全的?

objective-c - 保留在 NSThread 中创建的对象

java - H2 中 Hibernate ORM 的问题

java - 抽屉布局应用程序的架构

java - HttpServlet 没有实现runnable 或extend thread,为什么它是thread-able?

java - 拆分从 servlet 中的文本区域获取的 2 个句子

java - Spring不进入自定义 validator