0

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

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

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

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

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

4

1 回答 1

2

您可能不需要精确的一致性..但是您仍然不希望任何线程在写入普通哈希图时读取它(添加可能会导致重新哈希并将获取线程置于无限循环中)。

此外,该计划不会扩展到超过 1 台服务器。如果没问题....只需使用 ConcurrentHashMap。

于 2011-05-06T20:09:43.257 回答