检查时间是否已经过最有效的替代方案将线程存储在哈希图上或使用 nanoTime()

Check if time has passed most efficient t alternative Storing threads on a hashmap or using nanoTime()

我目前正在做一个涉及处理来自不同用户的多个请求的大型 Java 项目,我想知道哪种方式更有效地处理等待时间。例如:用户 A 在 5 秒内无法按下按钮。

第一种选择:有一个散列图,我在其中存储用户 ID 和线程 ID。然后在 x 时间内启动一个线程以 运行 一条命令。该命令是从 hashmap.If 中删除 A 用户 A 单击按钮,它检查 hashmap 是否包含他的 ID,然后取消该事件。如果我想尽快删除他,我会存储线程 ID。

第二种选择:有一个带有用户 ID 和 nanoTime + 5 秒的哈希图。如果 hashmap 时间值大于实际时间,则无法按下按钮。然后删除用户 ID。

如果您能想到任何其他提高效率的方法,欢迎提出。

第一种方法肯定不好,线程很昂贵,没有充分的理由在这里使用这种方法。
您可以采用第二种方法,但除非需要,否则不要使用 nanoTime。似乎 System.currentTimeMillis() 就足够了。此外,如果这是一个多线程应用程序(听起来确实如此),请将访问方法同步到您的地图,或者更好的是,使用 ConcurrentMap。您可能想要存储原始时间戳,在检查时添加等待时间——这只是 IMO 更简洁的设计。您可以让一个线程定期清理此地图。
最后,如果这是一个 Web 应用程序,您可以简单地将时间戳附加到用户会话。我认为几乎每个 servlet 容器和服务器平台都应该可以实现。