只有当某个方法中的所有线程都完成时,某个代码行才应该开始

问题描述

我是 Java 新手,而且我的知识确实很少。 然而,我的大学对我们有点苛刻。他们还没有教我们任何关于线程的知识。但是,他们要求我们提供一个包含线程的项目。 所以,我需要一些帮助。 这是一个网页检查器项目。 我创建了一个用于验证的类。它有一个 (ExecutorService) 作为实例变量,在构造函数中初始化。在该类中有一个 public void (URLsValidation) 方法,它创建一个新线程并在 ExecutorService 中执行它在 for 循环中:

      t1 = new ValidationThreads(incompleteLink,currentDepth + 1,stopAtDepth,clickTextTemp);
      es.execute(t1); 

当在一个框架中调用这个方法时,它下面的代码行在方法中的线程完成之前执行,给出错误的结果,因为它们的结果是基于线程的完成。 我不知道如何解决这个问题。 我的代码如下: URLSValidation 方法

(valid、invalid是类中的实例变量,用来统计有效链接和无效链接的个数)

    public void URLsValidation(String link,int currentDepth,int stopAtDepth,String clickableText) throws IOException,InterruptedException {
    
    ValidationThreads t1 = null,t2 = null;
    
    if (singleURLIsValid(link)) //singleURLIsValid is a method that checks the validity of a single link
    {
        valid++;
        
        System.out.println("Link: " + link + "\nText: " + clickableText);
        System.out.println("Valid Link\n\n");
        
        //base case for recursion
        if (currentDepth == stopAtDepth)
            return;
        
        //getting next depth links
        Document page = Jsoup.connect(link).get(); //opening the web document
        Elements anchor = page.select("a[href]"); //getting anchor tags
        String clickTextTemp;
        
        for (int i = 0; i < anchor.size(); i++) 
        {
            String incompleteLink = anchor.get(i).attr("href");
            incompleteLink = WebPageExtractions.joinParentLink(link,incompleteLink);
            Element temp = anchor.get(i);
            clickTextTemp = WebPageExtractions.getClickableText(temp);
            t1 = new ValidationThreads(incompleteLink,clickTextTemp);
            
            es.execute(t1);
        }
    } else {
        invalid++;
        System.err.println("Link: " + link);
        System.err.println("Invalid Link\n\n");
    }
}

从此类创建实例后,在 Jframe 中调用方法

        Validation v = new Validation(4); //the instance from that class
        String link = url.getText(); //getting the link from a textfield
        String d = depth.getText(); //getting the depth from a textfield
        int depth = Integer.parseInt(d);
        
        //calling the method to validate
        v.URLsValidation(link,depth,"????");
        
        System.out.println(v.valid + "  " + v.invalid);
      

v.valid 和 v.invalid 在方法中的线程结束之前打印,因此它们给出错误的值

任何提示如何解决这个问题? 考虑到我对线程的了解为 0,到目前为止我使用的所有东西都是我在谷歌上搜索过的东西。 提前致谢!!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)