gpt4 book ai didi

java - 如何根据已过去的时间更改 Java 中哈希表内的值?

转载 作者:行者123 更新时间:2023-12-02 08:47:55 26 4
gpt4 key购买 nike

我正在尝试模拟分布式文件系统,但在模拟心跳的工作原理时遇到了一些麻烦。我有一个存储文件元数据的名称节点和实际存储文件 block 的数据节点。我定期(例如每 3 秒)从数据节点向名称节点发送一条消息,告诉名称节点它还活着。

目前,我在名称节点中有一个哈希表,它存储数据节点名称(字符串)作为键,以及告诉我数据节点是否仍然存在的 boolean 值作为值。如果我收到来自数据节点的消息,哈希表中的值将切换为 true。我遇到困难的部分是,如果我在 10 秒内没有收到来自数据节点的消息,如何将值切换回 false?

我唯一能想到的就是为每个心跳添加时间戳,并将每个时间戳放入另一个包含数据节点名称和时间戳的哈希表中。然后编写一个函数,将当前时间与哈希表中的每个时间戳进行比较,并将 boolean 哈希表中时间戳超过 10 秒前的任何数据节点更改为 false。然后将该函数放入无限 while 循环中。处理此类问题的更好方法是什么?

最佳答案

您将 map 从 Map<String, Boolean> 更改为至Map<String, Instant> ,因此它存储最后一次心跳时间,而不仅仅是“是否存活” boolean 值。

然后你写一个boolean isAlive(String name)将查找 map 条目的方法。如果找到条目并存储 Instant过去不到10秒,你返回true ,否则返回 false .

无需保留 Map最新。您只需使用该方法封装 map ,即可在查询时解释 map 值“实时”。

关于java - 如何根据已过去的时间更改 Java 中哈希表内的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60961488/

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