gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 10:22:02 25 4
gpt4 key购买 nike

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

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

第二种选择:拥有一个包含用户 ID 和 nanoTime + 5sec 的 HashMap 。如果 HashMap 时间值大于实际时间,则无法按下按钮。然后用户 ID 被删除。

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

最佳答案

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

关于java - 检查时间是否已过最有效的替代方案将线程存储在 HashMap 上或使用 nanoTime(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35532560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com