我的目的不是要回答这个问题,特别是。因为我没有多方面的专业知识;但是,我想指出我认为值得注意的地方。
@JB Nizet在评论之一中提到该代码是 线程安全的 和 正确的 。我想根据Java
API参考添加但
不一致
:
检索操作(包括获取)通常不会阻塞,因此可能与更新操作(包括放置和删除)重叠
这意味着 当前正在 运行某些更新时,可能会有一个客户端获取此信息。而且,这很有意义,因为您在代码中提到了“循环”。因此,如果这对您而言 并不
重要,那么一切都应该很好。
但是,如果您需要对此进行更严格的规定,我在想也许使用的实例
ReentrantReadWriteLock将是一个不错的选择。该锁使您的代码可以阻止所有读取请求,直到对可用信息有
一致的 快照为止。您可能会使用
getCount方法上的锁来严格阻止,直到
add方法释放所有锁,以等待代码中使用的映射的一致快照为止。
我也有一个猜测,当您将其迁移到集群解决方案时,同样的担忧是有效的。如果需要在不同群集节点之间 保持一致性 ,则应注意这一点。



