【发布时间】:2018-02-19 10:43:47
【问题描述】:
我已经实现了一个 Spring Boot HTTP 方法,允许为任何 Twitter 帐户获取 5000 个关注者。
在后端,首先,我使用
检索 5000 个关注者 IDIDs ids = twitter.getFollowersIDs(username, -1);
之后,我将 5000 个 id 分成 100 个块。
然后,我使用 AsyncTwitter 向 Twitter 异步发送多个“lookupUsers”HTTP 请求,并使用 LOCK.wait() 暂停线程;
然后,使用以下监听器方法:
@Override
public void lookedupUsers(ResponseList<User> users)
我阅读了每个响应并将返回的用户列表添加到类属性“followerAccounts”中。
最后,当我返回所有响应时,我使用 LOCK.notify() 解除对主线程的阻塞,并将“followerAccounts”作为 HTTP 方法的响应返回。
问题在于,当两个外部用户同时调用同一个 Spring HTTP 方法时,无法在任何“lookedupUsers”方法中检查 TwitterListener 所指的两个 HTTP 请求中的哪一个。
有什么办法可以得到例如lookupUsers(ResponseList users) 方法中 Twitter HTTP 响应的某些标头或任何传递参数的方式,这些参数以某种方式指示链接到响应的“lookupUsers”请求?
我不想让我的 HTTP 方法同步,因为那样它就无法扩展以支持大量并行请求。
【问题讨论】:
-
在我看来,你所谓的“主线程”实际上是由 HTTP 请求启动的线程......我不明白它如何与其他请求混合......可能我没听懂你的意思。无论如何,暂停线程对我来说听起来并不好。
标签: java multithreading spring-boot twitter twitter4j