我正在尝试通过构建网络爬虫来学习线程,在以下代码中 searchHelper(网站,关键字);从网页中查找所有链接并保留在网址中包含关键字的链接,其想法是调用searchHelper,然后为每个链接找到一个线程,以便充当网络抓取工具,例如,如果FIRST网站它上面包含5个链接,然后将形成5个线程,这样就会有五个网络爬虫一起工作,目前线程不工作,所以我只能从第一页获得结果,我已经能够让它无需工作线程,例如,如果我删除整个for循环并用while循环替换然后web爬虫程序按预期工作,任何帮助都会欣赏,这里是执行线程的方法
private void search(String website, String keyword)
{
searchHelper(website, keyword);
int limit = queue.size();
Thread[] threads = new Thread[limit];
for(int i = 0; i < limit; i++)
{
threads[i] = new Thread(new Runnable()
{
@Override
public void run()
{
while(!queue.isEmpty() && queue.size() <= 10000)
searchHelper(queue.poll(), keyword);
}
});
threads[i].start();
}
if(results.isEmpty())
text.append("No results, sorry :(");
else
{
text.append("\nList of results:\n\n");
for(String x: results)
text.append(x + "\n");
}
}
答案 0 :(得分:0)
您不必等待线程完成。甚至在单个线程完成其工作之前,可能会到达代码的最后一部分,因此无法显示任何结果。
答案 1 :(得分:0)
在你的for循环之后添加这个:
for(int i = 0; i < limit; i++)
{
threads[i].join();
}
这样,主线程将在访问结果之前等待所有线程完成执行。