【问题标题】:Timeout hashtable Java超时哈希表 Java
【发布时间】:2016-02-28 11:41:07
【问题描述】:

我仍在学习编程,遇到了一项我必须完成的有趣任务。非常感谢您的帮助,因为我不知道如何执行这样的任务,而且我已经与它斗争了几天......

在定义的时间内将元素存储在 Hashtable 中的类。时间用完后,必须删除 value 和 key。访问或操作一个值,重置该值的计时器。我设法弄清楚的是使用计时器,但我不知道从哪里开始。我不能使用其他答案中建议的 Guava MapMaker 之类的其他东西。

非常感谢您的想法和帮助!

【问题讨论】:

    标签: java multithreading timer timeout hashtable


    【解决方案1】:

    使用 put、get 和 remove 等方法创建一个具有并发 Hashmap 的类。

    当放置一个元素时,将其添加到地图中并安排一个可运行的对象在一段时间后将其移除。请参阅 SchedulerExecutorService 类来做到这一点。

    执行器服务的submit() 方法返回一个Future,它允许您在必要时取消删除过程。

    【讨论】:

    • 谢谢你。会检查出来!你知道类似问题的任何好消息来源吗?我的背景与编程和计算机科学无关,我很想看看这方面的一些读物。
    • 老实说,我会使用提供缓存实现的 Guava 库。请参阅github.com/google/guava/wiki/CachesExplained(如果您没有问题,请考虑接受该主题的答案,以帮助其他有相同问题的人轻松找到它)
    【解决方案2】:

    如果滚动您自己的解决方案,这可能涉及将条目存储在具有时间戳的 ConcurrentMap 中。然后,您可能会有一个删除过时条目的计划作业(请参阅ScheduledExecutorService)。

    这个问题已经被许多缓存实现解决了很多次。请参阅 Guava 的 CacheBuilder 了解此类实现。

    【讨论】:

    • 谢谢你。会检查出来!你知道关于类似问题的任何好的资源吗?我的背景与编程和计算机科学无关,我很想看看这方面的一些读物。
    猜你喜欢
    • 1970-01-01
    • 2018-10-13
    • 2014-02-01
    • 1970-01-01
    • 2021-09-14
    • 2011-07-23
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多