2013-07-31 1 views
0

while 루프를 실행하면 java가 매개 변수가 true인지 계속 확인합니까? 예를 들어, while 루프는 while-loop stop mid-execution?

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

하지만 다른 스레드의 변화가 8 k는 5 초간

은, 루프를 즉시 대기 또는 종료 계속하는 경우?

+4

당신은'=='대신'='를 사용하고 있습니다. 오타가있을 수 있습니다. 둘째,'k'는 인스턴스 변수입니까? –

+0

'k' 란 무엇입니까? 당신은 그것에 관련된 코드를 생략했습니다 ... –

+0

각 라인은 그것이 말하는 것과 더 이상하지 않습니다. 다른 시나리오에서 주변의 다른 행이 무엇을할지 모릅니다. 그것이 자고있을 때, 그것은 그것이하는 모든 것입니다. BTW가 즉시 멈춘다면 잠자는 시간을 설정하는 것이 무엇이겠습니까? –

답변

6

아니요, 실행 경로가 실행될 때만 확인합니다. 따라서, 귀하의 예제에서 5 초마다 점검합니다.

즉시 알림을 받으려면 wait(), notify() 또는 다른 동기화 메서드를 사용해야합니다. 여기

example

2

루프가 반복 될 때마다 신체의 실행 후에 일단 입력 된 경우, 조건이 개시시 한번 확인되고있다. 따라서 신체가 실행되는 동안 k이 변경 되더라도 즉시 종료되지 않습니다.

아, 아마도 k == 7을 의미했을 것입니다 (=이 지정하는 동안 ==과 비교). 일부는 잠재적으로이 실수를 피하기 위해 7 == k으로 작성합니다.

이것은 실제로 스레드와 관련이 없습니다. 예를 들어, 고려 : 몸이 아직 완전히 심지어 k 불구하고 실행하는 방법을

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

사항은 즉시 값을 더 이상 만족 루프 조건으로 변경됩니다.

5

아니요. k이 휘발성 (또는 더 나쁜 것은 휘발성이 아닌 다른 스레드에서 변경된 경우, 나쁜 아이디어) 또는 루프 내부에서 호출되는 메소드를 통해 속성이 변경 될 수있는 객체 인 경우에만 확인됩니다. 루프 본문의 끝. 본문을 반복하거나 루프를 계속지나 가기로 결정합니다.

스레드를 중단하고 루프 밖에서 catch를 사용하거나 내부 검사 및 break을 사용하여 루프를 나눌 수 있습니다.