首页 > 解决方案 > 在 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 添加到队列或其他模式以实现此行为。

标签: javaconcurrencyninja

解决方案


推荐阅读