JAVA 프로그래밍

문제

속력이 다른 3명의 선수가 달리기하는 문제입니다 이를 해결하는 프로그램의 다음 실행상태에 대해 빈칸을 채우세요 

프로그램의 실행순서 및 실행상태

1  public static void main( String[] args ) {  

2   for( int lane = 1; lane <= speed.length; lane++ ) {

4                    new Player( lane, speed[lane-1] );

P1b  public Player( int lane, int speed ) {

P1e  }
                   main()                                                         
 speed[0]  35 
      [1]  20 
      [2]  50 
     lane  1 
   player    
  ()
 this  (obj01) 
 lane  1 
speed  35 
  x max lane speed  (obj01) 

3    Player player = 

5    player.start();

P2b  public void run() {

1     1

P21    for( x = 2; x < max; x++ ) {
                   main()                                                         
 speed[0]  35 
      [1]  20 
      [2]  50 
     lane  1 
   player  (obj01) 
  ()
 this  (obj01)    x max  6  lane  1  speed  35   (obj01) 

1옷   1

P22     Thread.sleep( speed );

E001 // speed 밀리초만큼 플레이어 스레드는 대기

2   for( int lane = 1; lane <= speed.length; lane++ ) {

4                    new Player( lane, speed[lane-1] );

P1b  public Player( int lane, int speed ) {

P1e  }
                   main()                                                         
 speed[0]  35 
      [1]  20 
      [2]  50 
     lane  2 
   player  
  ()
 this  (obj02) 
 lane  2 
speed  20 
  ()
 this  (obj01)    x  2  max  6  lane  1  speed  35   (obj01) 
      x max lane speed  (obj02) 

3    Player player = 

5    player.start();

P2b  public void run() {

1옷   1
2 2

P21    for( x = 2; x < max; x++ ) {
                   main()                                                         
 speed[0]  35 
      [1]  20 
      [2]  50 
     lane  2 
   player  (obj02) 
  ()
 this  (obj01)    x  2  max  6  lane  1  speed  35   (obj01) 
  ()
 this  (obj02)    x max  6  lane  2  speed  20   (obj02) 

1옷   1
2옷 2

P22     Thread.sleep( speed );

E001 // speed 밀리초만큼 플레이어 스레드는 대기

2   for( int lane = 1; lane <= speed.length; lane++ ) {

4                    new Player( lane, speed[lane-1] );

P1b  public Player( int lane, int speed ) {

P1e  }
                   main()                                                         
 speed[0]  35 
      [1]  20 
      [2]  50 
     lane  3 
   player  
  ()
 this
 lane
speed
  ()
 this   x  2  max  6  lane speed  (obj01) 
  ()
 this   x  2  max  6  lane speed  (obj02) 
      x  1  max  6  lane speed  (obj03) 

3    Player player = 

5    player.start();

P2b  public void run() {

1옷   1
2옷 2
3 3

P21    for( x = 2; x < max; x++ ) {
                   main()                                                         
 speed[0]  35 
      [1]  20 
      [2]  50 
     lane  3 
   player  (obj03) 
  ()
 this  (obj01)    x  2  max  6  lane  1  speed  35   (obj01) 
  ()
 this  (obj02)    x  2  max  6  lane  2  speed  20   (obj02) 
  ()
 this  (obj03)    x max  6  lane  3  speed  50   (obj03) 

1옷   1
2옷 2
3옷 3

P22     Thread.sleep( speed );

E001 // speed 밀리초만큼 플레이어 스레드는 대기

2   for( int lane = 1; lane <= speed.length; lane++ ) {

6  }

E002 // main 스레드는 종료했지만 플레이어 스레드는 대기

E003 // 20 밀리초 후   

P23    }
                                                                                  
  ()
 this  (obj01)    x  2  max  6  lane  1  speed  35   (obj01) 
  ()
 this  (obj02)    x  2  max  6  lane  2  speed  20   (obj02) 
  ()
 this  (obj03)    x  2  max  6  lane  3  speed  50   (obj03) 

P21    for( x = 2; x < max; x++ ) {
                                                      
x max  6  lane  1  speed  35   (obj01) 
x max  6  lane  2  speed  20   (obj02) 
x max  6  lane  3  speed  50   (obj03) 

1옷   1
2 옷 2
3옷 3

P22     Thread.sleep( speed );

E001 // speed 밀리초만큼 플레이어 스레드는 대기

E004 // 35 밀리초 후      

P23    }
                                                                                  
  ()
 this  (obj01)    x  2  max  6  lane  1  speed  35   (obj01) 
  ()
 this  (obj02)    x  3  max  6  lane  2  speed  20   (obj02) 
  ()
 this  (obj03)    x  2  max  6  lane  3  speed  50   (obj03) 

P21    for( x = 2; x < max; x++ ) {
                                                      
x max  6  lane  1  speed  35   (obj01) 
x max  6  lane  2  speed  20   (obj02) 
x max  6  lane  3  speed  50   (obj03) 

1 옷  1
2 옷 2
3옷 3

P22     Thread.sleep( speed );

E001 // speed 밀리초만큼 플레이어 스레드는 대기
                                              
... 

E009 // 80 밀리초 후  

P23    }
                                                                                  
  ()
 this  (obj01)    x  4  max  6  lane  1  speed  35   (obj01) 
  ()
 this  (obj02)    x  5  max  6  lane  2  speed  20   (obj02) 
  ()
 this  (obj03)    x  3  max  6  lane  3  speed  50   (obj03) 

P21    for( x = 2; x < max; x++ ) {
                                                      
x max  6  lane  1  speed  35   (obj01) 
x max  6  lane  2  speed  20   (obj02) 
x max  6  lane  3  speed  50   (obj03) 

P2e  }

E010 // 플레이어 스레드(lane2) 종료
                                              
... 

E013 // 140 밀리초 후  

P23    }
                                                                                  
  ()
 this  (obj01)    x  5  max  6  lane  1  speed  35   (obj01) 
  ()
 this  (obj03)    x  4  max  6  lane  3  speed  50   (obj03) 

P21    for( x = 2; x < max; x++ ) {
                                                      
x max  6  lane  1  speed  35   (obj01) 
x max  6  lane  3  speed  50   (obj03) 

P2e  }

E014 // 플레이어 스레드(lane1) 종료
                                              
... 

E016 // 200 밀리초 후  

P23    }
                                                                                  
  ()
 this  (obj03)    x  5  max  6  lane  3  speed  50   (obj03) 

P21    for( x = 2; x < max; x++ ) {
                                                      
x max  6  lane  3  speed  50   (obj03) 

P2e  }

E017 // 플레이어 스레드(lane3) 종료

E018 // 모든 스레드 종료 후 프로그램 종료


프로그램 코드

E001	// speed 밀리초만큼 플레이어 스레드는 대기
E002	// main 스레드는 종료했지만 플레이어 스레드는 대기
E003	// 20 밀리초 후   
E004	// 35 밀리초 후      
E005	// 40 밀리초 후    
E006	// 50 밀리초 후   
E007	// 60 밀리초 후   
E008	// 70 밀리초 후  
E009	// 80 밀리초 후  
E010	// 플레이어 스레드(lane2) 종료
E011	// 100 밀리초 후  
E012	// 105 밀리초 후  
E013	// 140 밀리초 후  
E014	// 플레이어 스레드(lane1) 종료
E015	// 150 밀리초 후  
E016	// 200 밀리초 후  
E017	// 플레이어 스레드(lane3) 종료
E018	// 모든 스레드 종료 후 프로그램 종료
	
	class Player extends Thread 
	{
		private int x, max, lane, speed;
		
P1b		public Player( int lane, int speed ) {
			this.x = 1;
			this.max = 6; 
			this.lane = lane;
			this.speed = speed;
P1e		}
		
P2b		public void run() {
			try {
				System.out.print( "\033[" + lane + ";1f" + lane );
				System.out.print( "\033[" + lane + ";"+(max+2)+"f" + lane );
				
P21				for( x = 2; x < max; x++ ) {
					System.out.print( "\033[" + lane + ";"+ x +"f 옷" );
					System.out.print( "\033[4;40f" );
P22					Thread.sleep( speed );
P23				}
			} catch( Exception e ) {
			}
P2e		}
	}
	
	public class Race 
	{
1		public static void main( String[] args ) { 	
			int[] speed = { 35, 20, 50 };
2			for( int lane = 1; lane <= speed.length; lane++ ) {
3				Player player = 
4				                new Player( lane, speed[lane-1] );
5				player.start();
			}
6		}
	}