Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
内部带有布尔值的多线程Java double for循环_Java_Multithreading_For Loop - Fatal编程技术网

内部带有布尔值的多线程Java double for循环

内部带有布尔值的多线程Java double for循环,java,multithreading,for-loop,Java,Multithreading,For Loop,我想知道在这种情况下我是否可以多线程处理double for循环。 在第二个for循环中,如果某个条件完成并且 在第一个循环中使用此布尔值的结果。在这种情况下,多线程是否会破坏结果?如果不是,它是否会提高计算事件的速度 这是我的密码: ArrayList<Appartement> sorted = new ArrayList<>(); boolean ispresent = false; for (Appartement p1: res2) { ispresen

我想知道在这种情况下我是否可以多线程处理double for循环。 在第二个for循环中,如果某个条件完成并且 在第一个循环中使用此布尔值的结果。在这种情况下,多线程是否会破坏结果?如果不是,它是否会提高计算事件的速度

这是我的密码:

ArrayList<Appartement> sorted = new ArrayList<>();
boolean ispresent = false;
for (Appartement p1: res2) {
     ispresent = false;
     for (Appartement p2: res2) {
         if (p1.equals(p2))
             continue;
             if (!p1.ContainNull() && !p2.ContainNull()){
             if (p1.getRoomCount().equals(p2.getRoomCount()) && p1.getPrice().equals(p2.getPrice()) && p1.getSurface().equals(p2.getSurface())
                            && p1.getZipCode().equals(p2.getZipCode()) && p1.getNewBuild().equals(p2.getNewBuild())
                            && p1.getPropertyType().equals(p2.getPropertyType()) && p1.getFurnished().equals(p2.getFurnished())
                            && p1.getMarketingType().equals(p2.getMarketingType())) {
                        ispresent = true;
                        break;
                    }
                }
            }
          if (!ispresent)
              sorted.add(p1);
     }
ArrayList sorted=new ArrayList();
布尔值ispresent=false;
适用于(公寓p1:res2){
ispresent=false;
适用于(p2公寓:res2){
如果(p1等于(p2))
继续;
如果(!p1.ContainNull()&&!p2.ContainNull()){
如果(p1.getRoomCount().equals(p2.getRoomCount())&&p1.getPrice().equals(p2.getPrice())&&p1.getSurface().equals(p2.getSurface())
&&p1.getZipCode().equals(p2.getZipCode())和&p1.getNewBuild().equals(p2.getNewBuild())
&&p1.getPropertyType().equals(p2.getPropertyType())和&p1.getProvidered().equals(p2.getProvidered())
&&p1.getMarketingType()等于(p2.getMarketingType()){
ispresent=true;
打破
}
}
}
如果(!ispresent)
已排序。添加(p1);
}

在此我将非常感谢您的帮助。

那么您想创建一个新线程来运行每个for循环中的代码吗?如果在当前的实现中这样做,它可能会中断,因为
ispresent
变量将在两个线程的范围内,这肯定会导致问题

如果要将内部for循环完全放在一个单独的类中,该类将内部循环作为线程运行,并负责将其添加到该方法内部的arraylist中,如以下psuedo代码所示:

class threadedLoop{
 public void run() {
        //Do your loopy stuff
        //if ispresent then add to arraylist you passed as parameter
    }

    public static void main(String args[]) {
        (new threadedLoop()).start();
    }
}

然后,您将消除任何可能冲突的风险,并将看到程序速度的提高!看看如何实现这些线程。

为什么不试试看呢?看起来您只想创建一个包含所有唯一项且不重复项的列表。实际上,您可以使用HashSet以O(n)的复杂度在一次传递中完成这项工作,因此您当然不需要多个线程。我正在解析一个json文件,当我尝试使用HashSet时,它会将所有带有duplicate的装置放在那里,所以我尝试了这种方法。我的班级公寓得到了很少的字符串值和int。谢谢,是的,我获得了一些时间,它没有破坏我的结果。很高兴它有帮助!如果这是你想要的,你能接受我的回答吗?非常感谢