1

When executing a while loop, does java constantly check if the parameter(s) are true? For example if a while loop is

while(k=7) {
    Thread.sleep(5000);
}

but during the 5 seconds another thread changes k to 8, would the loop continue waiting or exit immediately?

4

3 回答 3

7

不,它只会检查执行路径何时将其带到那里。因此,在您的示例中,它将每 5 秒检查一次。

如果您想立即收到通知,则必须使用 wait()、notify() 或其他一些同步方法。

这是一个例子

于 2013-07-31T16:41:54.910 回答
5

不,即使k是 volatile (或者,更糟糕的是,从另一个线程更改而您没有使其成为 volatile;坏主意)或者其属性可以通过循环内调用的方法更改的对象,它也只会在循环结束时检查正文,决定重复正文或继续循环。

您可以通过中断线程并将 catch 置于循环之外,或使用内部检查和break.

于 2013-07-31T16:42:26.247 回答
2

条件在开始时检查一次,如果进入循环,则在每次迭代执行主体后检查一次。所以不,它不会立即退出,即使k在执行主体时被更改。

哦,您可能的意思是k == 7(回想一下,在分配==时进行比较)。=有些人甚至会写信7 == k来避免可能犯这个错误。

这与线程并没有太大关系。例如,考虑:

int k = 7;
while (k == 7) {
    k = 8;
    System.out.println("here!");
}
这里!

请注意,即使k立即将主体更改为不再满足循环条件的值,主体仍如何完全执行。

于 2013-07-31T16:42:19.167 回答