Jsoup连接分为多个线程

时间:2017-05-29 10:22:17

标签: java multithreading jsoup

我正在尝试在Jsoup中创建简单的爬虫。它找到网站源代码中的所有链接,并最终跟随它们,再次在每个链接中搜索新链接等等。

问题是在超过两个重定向后计算时间很长。

enter image description here

这是它的工作方式的伪代码:

function follow_links(String[] links)
{

 for(int i=0; i<=links.amount-1; i++)
 {
   Document doc = Jsoup.connect(links[i]);
   String[] newlinks = new String[max];
   newlinks = parse(doc);
   ...       
 }

}

我的问题是,如果我在循环的每次迭代中创建新的Thread,代码是否会更快,因此所有连接都将并行建立。连接函数返回需要一些时间,所以我假设队列已经形成。线程可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我不这么认为。如果您的应用程序通过1000个链接,您将创建1000个线程,这将破坏您的整个应用程序性能。检查一下以了解更多LINK ABOUT THREADS

最好保留一个线程池并进行搜索&#39;提交任务。使用ExecutorServices的CompletableFuture似乎是解决方案。

这是关于Stack的主题,其中一个人试图将相同的想法实现到他的爬虫中。 LINK