我正在做一个webcrawler,我想不要用请求重载服务器,所以我会限制对服务器的访问。
我将有一个对象/集合,这是我将访问的链接列表。
我得到第一个链接,它来自Google(示例),访问并完成所有工作。我只能在20秒后使用另一个来自Google的链接(示例),在等待的时候,我会从其他域获取链接。
总结一下,我需要一个集合,允许我对其中的对象进行分类,并以确定的间隔从中获取对象。
有一些类似的吗?如果没有,建议在实施中使用哪些集合?这个集合将由各种线程访问。
答案 0 :(得分:7)
您可以使用DelayQueue。它是一个并发集合,只允许在“过期”后从中获取项目。您添加的项目必须实现Delayed。
您可能只想使用ScheduledExecutorService。例如,对于您正在抓取的每个域,您可以安排一个抓取下一个链接的任务,然后使用下一个链接重新安排另一个任务。