gpt4 book ai didi

java - 如何计算多线程程序的运行时间?

转载 作者:搜寻专家 更新时间:2023-10-31 20:01:44 25 4
gpt4 key购买 nike

我正在尝试测试我的网络爬虫的性能(在执行时间方面),但由于发生了多线程,我在计时时遇到了麻烦。

我的主课:

class WebCrawlerTest {
//methods and variables etc
WebCrawlerTest(List<String> websites){
//
}

if(!started){
startTime = System.currentTimeMillis();
executor = Executors.newFixedThreadPool(32); //this is the value I'm tweaking
started=true;
}
for(String site : websites){
executor.submit(webProcessor = new AllWebsiteProcessorTest(site, deepSearch));
}
executor.shutdown();
//tried grabbing end time here with no luck

AllWebsiteProcessorTest 类:

class AllWebsiteProcessorTest implements Runnable{
//methods and var etc

AllWebsiteProcessorTest(String site, boolean deepSearch) {
}
public void run() {
scanSingleWebsite(websites);
for(String email:emails){
System.out.print(email + ", ");
}

private void scanSingleWebsite(String website){
try {
String url = website;
Document document = Jsoup.connect(url).get();
grabEmails(document.toString());
}catch (Exception e) {}

使用另一个类(使用 main 方法),我创建了一个 WebCrawlerTest 实例,然后传入一组网站。爬虫工作正常,但我似乎无法弄清楚如何计时。

我可以获取开始时间 (System.getCurrentTime...();),但问题是结束时间。我试过像这样添加结束时间:

//another class 
public static void main(.....){
long start = getCurrent....();
WebCrawlerTest w = new WebCrawlerTest(listOfSites, true);
long end = getCurrent....();
}

这是行不通的。我还尝试在 executor.shutdown() 之后添加 end,这再次不起作用(立即触发)。如何为最后完成的线程 争取时间?

最佳答案

关闭你的执行者池之后

executor.shutdown();
//tried grabbing end time here with no luck

你可以简单地

executor.awaitTermination(TimeUnit, value)

此调用将阻塞,直到所有任务完成。花点时间,从中减去 T0,瞧,我们有执行时间。

shutdown() 方法只是确保没有新任务将被接受到执行队列中。将执行已在队列中的任务(shutdownNow() 删除挂起的任务)。要等待所有当前正在运行的任务完成,您必须 awaitTermination()

关于java - 如何计算多线程程序的运行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29386511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com