자바 멀티 스레딩 시뮬레이션 토끼와 거북이

거북이를하자 가서 빨리 누가 볼 1 (100)에서 시작하여 같은 트랙에 토끼.

1 개  공용  클래스 레이서 구현 의 Runnable {
 2      개인  정적 문자열 승자; // 胜利者
3  
4      @Override
 5      공개  공극 실행 () {
 6          // 赛道
7           ( INT의 단계 = 1 단계 <= 100 단계 ++ ) {
 8   / * . 만약 (는 Thread.currentThread () getName () .equals ( "兔子") && 단계 50 % == 0) {
 9        시도 {
 10            에 Thread.sleep (200);
11        } 캐치 (의 InterruptedException E) {
 12           e.printStackTrace ();
13        }
 14    } * / 
15              에서 System.out.println (.는 Thread.currentThread () getName () + "---->走了"+ + 단계 "步" );
16  
17               부울 플래그 = GameOver (단계);
18 일               경우 (플래그) {
 19                   체류 ;
20               }
 21  
22          }
 23      }
 24  
25      전용  부울 GameOver ( INT의 공정) {
 26 일          경우 (당첨자! = null의 ) {
 27              반환  사실;
28          } 다른 {
 29 일              경우 (단계 == 100 ) {
 30                  당첨자 = 는 Thread.currentThread () getName ().;
(31)                  에서 System.out.println ( "胜利者是->"+ 우승자);
32              }
 33          }
 34          반환  거짓 ;
35      }
 36  
37      공공  정적  무효 메인 (문자열 []에 args) {
 38          레이서 레이서 = 새로운 레이서 ();
39          새로운 스레드 (경주, "兔子" ) .start ();
40          새로운스레드 (레이서 "거북" ) .start ();
 (41)는  
42이다      }
 (43) 인  
44된다 }

결과 :

토끼 ----> 1 단계로 이동

...................

토끼 ----> 이동 98 단계의
토끼 ----> 99 단계의 이동
토끼 ----> 100 단계 떨어져
승자는 -> 토끼

어떻게 토끼 원으로 밝혀졌다, 그러나 우리는 그를 토끼 잠하자 잠을 스레드를 추가하면 현실 거북이 거북이의 승리, 그리고 거북이가 이길 수있다.

1 개  공용  클래스 레이서 구현 의 Runnable {
 2      개인  정적 문자열 승자; // 胜利者
3  
4      @Override
 5      공개  공극 실행 () {
 6          // 赛道
7           ( INT의 단계 <= 100 단계 = 1 단계 ++ ) {
 도 8    의 경우 .. (는 Thread.currentThread () getName (같음) ( "兔子") && 단계 50 % == 0 ) {
 9        시도 {
 10            에 Thread.sleep (200 );
11        } 캐치 (예외 : InterruptedException 전자) {
12            e.printStackTrace ();
13        }
 14    }
 15              에서 System.out.println (는 Thread.currentThread () getName () + "---->走了"+ + 단계 "步." );
16  
17               부울 플래그 = GameOver (단계);
18 일               경우 (플래그) {
 19                   체류 ;
20               }
 21  
22          }
 23      }
 24  
25      전용  부울 GameOver ( INT의 공정) {
 26 일          경우 (당첨자! = null의 ) {
 27              반환  사실;
28          } 다른 {
 29 일              경우 (단계 == 100 ) {
 30                  당첨자 = 는 Thread.currentThread () getName ().;
(31)                  에서 System.out.println ( "胜利者是->"+ 우승자);
32              }
 33          }
 34          반환  거짓 ;
35      }
 36  
37      공공  정적  무효 메인 (문자열 []에 args) {
 38          레이서 레이서 = 새로운 레이서 ();
39          새로운 스레드 (경주, "兔子" ) .start ();
40          새로운스레드 (레이서 "거북" ) .start ();
 (41)는  
42이다      }
 (43) 인  
44된다 }

결과 :

터틀 ----> 아래 96 단계
거북 ----> 아래 97 단계
거북 ----> 아래 98 단계
거북 ----> 아래 99과 같이
얻어 거북 ----> 100 단계
거북이> - 승자는
토끼 ----> 50 개 단계를 이동

이에 상관없이 실행 거북이가 승리하는 방법을 경우입니다.

추천

출처www.cnblogs.com/xiaoqiqistudy/p/10984279.html