【问题标题】:Multhreading Java double for loop with boolean inside内部带有布尔值的多线程Java双循环
【发布时间】:2017-05-26 01:33:21
【问题描述】:

我想知道在这种情况下我是否可以对我的双 for 循环进行多线程处理。 在第二个 for 循环中,如果某些条件完成,我将布尔值发送为 true 并且我 在第一个循环中使用此布尔值的结果。在这种情况下,多线程会破坏结果吗?如果不是,它会增加计算事件的速度吗?

这是我的代码:

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);
     }

我希望能得到一些帮助。

【问题讨论】:

  • 何不试试看呢?
  • 您似乎只想构建一个包含所有唯一项目且没有重复项的列表。实际上,您可以使用 HashSet 在 O(n) 复杂度的情况下一次性完成,因此您当然不需要多个线程。
  • 我正在解析一个 json 文件,当我尝试使用 HashSet 时,它会将我所有的公寓都放在那里,所以我尝试了这种方式。我的班级公寓很少有字符串值和整数。

标签: java multithreading for-loop


【解决方案1】:

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

如果您要将内部 for 循环完全放在一个单独的类中,该类将内部循环作为线程运行并负责添加到该方法内部的数组列表中,如下面的伪代码:

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();
    }
}

那么您将消除任何可能发生冲突的风险,并且应该会看到您的程序速度有所提高!看看here 看看如何实现线程。

【讨论】:

  • 谢谢,是的,我获得了一些时间,但并没有搞砸我的结果。
  • 很高兴它有帮助!如果这是你要找的,你能接受我的回答吗?非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-24
  • 2017-09-12
  • 1970-01-01
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 2016-09-19
相关资源
最近更新 更多