Java - While循环与嵌入式线程的bug

时间:2014-11-29 04:21:25

标签: java multithreading while-loop

我在下面有这个代码,它评估是否完成了三个线程,如果是,则继续执行代码。问题是,当我在if语句之前包含某种print语句时,它会像往常一样工作。但是,当我不包括印刷品时,它会永远持续下去。这是:

while (!are_we_done) {
    System.out.println(are_we_done);
    if (thread_arr[0].are_we_done==true && thread_arr[1].are_we_done==true && thread_arr[2].are_we_done==true) {
        are_we_done=true;
    }
}

有关进展情况的任何线索? 提前感谢您的任何帮助/建议。

2 个答案:

答案 0 :(得分:3)

问题在于我必须将线程类中的are_we_done变量指定为volatile

答案 1 :(得分:0)

您使用线程的工作非常棒 - 谷歌忙着等待#。

  • 在主线程中介绍' latch = new CountDownLatch(<线程数>)'变量
  • 将其传递给您的所有主题
  • 完成线程调用' latch.countDown()'
  • 在主线程中等待所有生成的线程完成' latch.await(...)'

示例:

public static void main(String... args) throws Exception {
    Thread[] threads = new Thread[3];
    CountDownLatch latch = new CountDownLatch(threads.length);

    for (int i = 0; i < threads.length; i++) {
        threads[i] = new Thread(new YourRunnable(latch));
        threads[i].start();
    }

    while (!latch.await(1000)) {
        System.out.println("Not complete yet");
    }

    System.out.println("Complete!");
}

public class YourRunndable implements Runnable {
    ... // fields + constructor

    public void run() {
        try {
            ... // do your staff
        } finally {
            latch.countDown();
        }
    }
}