考虑这些共享标志,表明完成了两个不同的任务:
volatile boolean completed1 = false;
volatile boolean completed2 = false;
现在考虑两个线程:
没有。 1:
completed1 = true;
if (completed1 && completed2) continueSomeOtherStuff();
没有。 2:
completed2 = true;
if (completed1 && completed2) continueSomeOtherStuff();
continueSomeOtherStuff()至少可以被可靠地调用一次吗?
更新
在http://www.cs.umd.edu/~pugh/java/memoryModel/jsr133.pdf中发生在的定义中找到它:
在最后一句中没有提到线程关系,所以我认为它在所有线程中都是有效的。