2011-06-27 29 views
2

我正在做一个网络爬虫,并且我不想用请求重载服务器,所以我会限制访问服务器的时间。在Java中,有一个集合,我可以在一段时间后才能获取元素?

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

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

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

还有一些与这类似的吗?如果不是,推荐在实施中使用哪些集合?这个集合将被各种线程访问。

+0

这就是智能地图/缩减作业的完美例子。 – fyr

回答

7

您可以使用DelayQueue。这是一个并发集合,只允许一旦它们“过期”就从其中取出物品。您添加的项目必须执行Delayed。您可能也只想使用ScheduledExecutorService。例如,对于您要爬网的每个域,您可以安排抓取下一个链接的任务,然后使用下一个链接重新安排另一个任务。

+0

整洁!我不知道这些类。我正要提出一种方法,即链接处于一个简单的队列中,并且在访问该链接时,该域的条目已在单独的散列表中用新的时间戳更新。 DelayQueue的整体效果相同,但不太优雅。 +1先生。 – jpm

+0

+1当场 – maasg

+0

@jpm我试着用你提供的解决方案,但我会尝试DelayQueue。我也没有意识到这一点。 –

相关问题