기금넷 공식사이트 - 복권 조회 - 자바 스레드, while () 괄호는 false 로 판단됩니다. 왜 while 루프를 실행합니까?
자바 스레드, while () 괄호는 false 로 판단됩니다. 왜 while 루프를 실행합니까?
복권 500W 를 살 확률이 원하는 효과를 얻을 수 있어요. ᄏ
문제는 주로 다음과 같습니다.
이것은 네가 전화해서 자는 것과는 별로 관계가 없다.
주 스레드는 처음부터 하위 스레드를 시작하여 두 스레드가 동시에 CPU 시간 슬라이스를 선점합니다.
대부분의 경우 하위 스레드는 다음 명령문을 실행할 때 실행 및 인쇄를 유지합니다.
System.out.println ("-"+newdate ()+"-");
주 스레드가 타임 슬라이스를 빼앗았고, 주 스레드가 다시 실행되기 시작했고, 주 스레드가 실행되는 동안 플래그가 마침 false 로 설정되었습니다.
그런 다음 하위 스레드는 타임 슬라이스를 잡고 실행을 시작하고 플래그를 인쇄합니다. 플래그의 값이 주 스레드에 의해 수정되었기 때문에 인쇄의 결과는 거짓임이 분명합니다. 여기서 중요한 점은 하위 스레드가 플래그 값을 인쇄할 때 하위 스레드가 while 판단을 전혀 하지 않는다는 것입니다. 하위 스레드가 지난번에 판단을 통과했기 때문에 하위 스레드가 약간 말을 듣지 않고 다시 한 번 실행되었기 때문입니다.
사실, "플래그가 이미 거짓이고 while 의 문이 계속 실행됩니다." 라는 말이 사실이라면, 5 줄 이상의 인쇄 효과를 볼 수 있을 것입니다. 그리고 반드시 사순환의 인쇄가 아닐까요? (시드 비셔스, Northern Exposure (미국 TV 드라마), 죽음명언)
간단한 수정은 다음과 같을 수 있습니다.
공용 클래스 테스트 중단 {
공용 정적 void main(String[] args) {
Myth read mt = new myth read ();
Mt.start ();
시도 {
//thread.sleep (1000);
System.out
。 Println(Thread.currentThread ()) 을 참조하십시오. GetName()+"실행 중));
} catch (예외 e) {
}
동기화 (mt.flag) {
Mt.flag = false
}
}
}
클래스 MyThread 확장 스레드 {
부울 플래그 = 참;
공용 잘못된 실행 () {
While (참) {
동기화 (플래그) {
만약 (! 로고) {
System.out.println ("플래그가 false, exit");
깨뜨리다
}
System.out.println (thread.currentthread ()). GetName ()
+"실행 중");
System.out.println ("-"+newdate ()+"-");
시도 {
//수면 (2000);
System.out.println (flag);
System.out.println ("* * *"+thread.currentthread (). GetName ()
+"는"+"* * *" 를 실행하는 것입니다.
} catch (예외 e) {
깨뜨리다
}
}
}
}
}
가능할 것 같아요. 테스트가 없어요.
- 관련 기사
- 집 부엌 구덩이에 불이 타는 꿈을 꾸었다.
- 나는 뷔페에서 초콜릿을 많이 먹는 꿈을 꾸었다.
- SteamVR 블랙 스크린 문제
- 주공의 꿈해몽 세부사항: 얕은 물에서 수영하는 꿈은 무엇을 의미합니까?
- 몽환적인 서유에서 야생의 변이를 잡을 수 있을까요?
- Qq 비행 판타지 경주 파편 어떤 상자를 열어?
- 왜 스포츠 복권이 개굴락 쿼터를 긁어서 표를 얻습니까?
- 복지복권 3D그룹픽 6개를 구매했습니다. 제가 구매한 번호는 169이고, 추첨된 번호는 921입니다. 제가 당첨됐나요?
- 재주가 없는 남자는 어떤 습관이 자주 있나요?
- 복색구 9 개, 농구 한 개에 얼마예요?