在Java中,有一个集合,我只能在一段时间后才能获取元素?

发布于 2024-11-17 15:57:11 字数 277 浏览 7 评论 0原文

我正在做一个网络爬虫,我不想让服务器因请求而超载,所以我会按时间限制对服务器的访问。

我将有一个对象/集合,它是我将访问的链接列表。

我得到第一个链接,它来自 Google(示例),访问并完成所有工作。我只能在 20 秒后获取来自 Google 的另一个链接(示例),在等待期间,我会收到来自其他域的链接。

总而言之,我需要一个集合,它允许我对其中的对象进行分类,并以确定的时间间隔从中获取对象。

有没有类似这个的?如果没有,建议在实施中使用哪些集合?该集合将被各种线程访问。

I'm doing an webcrawler, and I want to not overload the servers with requests, so I will limit the access to the servers by time.

I will have an object/collection that is an list of links that I will visit.

I get the first link and it's from Google(example), visit and do all the work. I only can take another link that is from Google after 20 seconds(example) and while I waiting, I get links from other domains.

Summarizing, I need a collection that allow me to classify the objects inside it and get the objects from it in determined intervals.

There is some similar to this? If not, what collections are recommend to use in the implementation? This collection will be access by various threads.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笑看君怀她人 2024-11-24 15:57:11

您可以使用 DelayQueue 来实现此目的。它是一个并发集合,只允许在项目“过期”后从中取出它们。您添加的项目必须实现延迟

您可能只想使用 ScheduledExecutorService。例如,对于您正在爬网的每个域,您可以安排一个抓取下一个链接的任务,然后使用下一个链接重新安排另一个任务。

You can use DelayQueue for this. It's a concurrent collection that only allows items to be taken from it once they have "expired". The items you add must implement Delayed.

You might also just want to use a ScheduledExecutorService. For example, for each domain you were crawling, you could schedule a task that grabs the next link, then re-schedules another task with the next link.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文