晚上好,
我有一个不同 URL 的列表(大约 500 个),我从这种方法中获得了哪些内容
public static String getWebContent(URL url){
// create URL, build HTTPConnection, getContent of page
}
在此之后,我有另一种方法,可以获取值等的内容。此时我这样做:
List<URL> urls = new ArrayList<>();
List<String> webcontents = new ArrayList<>();
for(URL url : urls){
webcontents.add(getWebContent(url));
}
// Futher methods to extract values from the webcontents
但这实际上需要很多时间,因为只有一个线程在做。我想让它成为多线程的,但我不确定最好的方法是什么。
首先,我需要每个线程的返回值,我应该实现Callable
而不是Runnable
实现它吗?
以及如何使用不同的线程运行该方法,是否应该有一个以索引 0 开头,一个以索引 50 开头,等等?当他们完成一个 URL 时,他们会设置一个标志为真吗?这将是我的方式,但我认为它不是很有效。如果第一个网站有很多内容,第一个线程可能会比其他线程花费更长的时间。
当每个线程都完成后,我如何才能将我的数据返回到一个列表?像这样?
List<String> webcontent = new ArrayList<>();
if(!t1.isAlive() && !t2.isAlive()){
webcontent.add(t1.getData());
webcontent.add(t2.getData());
}
我希望你能理解我的问题并给我一个提示:) 非常感谢