我在下面有这个代码,它评估是否完成了三个线程,如果是,则继续执行代码。问题是,当我在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;
}
}
有关进展情况的任何线索? 提前感谢您的任何帮助/建议。
答案 0 :(得分:3)
问题在于我必须将线程类中的are_we_done
变量指定为volatile
。
答案 1 :(得分:0)
您使用线程的工作非常棒 - 谷歌忙着等待#。
示例:
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();
}
}
}