java - 在 Java/Retrofit 中阻止对同一主机的并发请求
问题描述
我有一个 Java/Ninja 框架 Web 应用程序通过 Retrofit API 向第三方 API 发送请求。
我有一个线程 T1,它是使用 Ninja 框架调度注释( http://www.ninjaframework.org/apidocs/ninja/scheduler/Schedule.html)从线程池生成的。T1 不断轮询 host1 (example.com)。
当另一个线程说 T2 向同一主机(example.com)发起请求时,我希望 T2 等到 T1 完成其操作,反之亦然。
我检查了http://square.github.io/okhttp/3.x/okhttp/okhttp3/Dispatcher.html,但看起来 maxRequestsPerHost 可能无法同时工作。
我尝试使用 hashMap 来修改每个线程的 hostStatus 并将状态包含在同步块中,但是将其添加到多个方法中似乎很麻烦。
我不确定哪种并发模式或锁定机制适用于这种情况。有没有办法将 hostIds 添加到队列或其他模式以实现此行为。
解决方案
推荐阅读
- java - java.lang.OutOfMemoryError: Java 堆空间 Files.readAllBytes(path)
- javascript - 在动态父div之后插入?
- google-cloud-platform - GCP 只读角色(查看者角色)允许从 Google Container Registry 拉取图像
- elasticsearch - 节点磁盘大小的弹性搜索问题
- java - 为什么我的 Hibernate 日志记录如此模糊?
- swift - 将用户名/电子邮件保存到 iCloud 钥匙串 ios 12
- json - 如何使用 jq 合并两个 JSON 对象?
- c# - 与 System.Byte 或 String 等内置类型相比,使用像 Direction 这样的自定义枚举有什么好处?
- hyperledger-fabric - Hyperledger Fabric:是否可以在不使区块链饱和的情况下保存数百万个位置寄存器?
- asp.net - 为什么检查会话变量中的空引用会导致 ArgumentOutOfRangeException?