본문 바로가기

Java/Java 연습문제

스레드(Thread) 응용 - 1 (달리기 경주 기초)



  • 하트와 별의 달리기 경주 코딩
public class MoveHeart implements Runnable{
   @Override
   public void run() {
		
      try {
          for(int i=0; i < 9; i++) {
              for(int a=0; a<30; a++) System.out.println(); // 30줄 띄우기
				
              // i 이하만큼 반복하면서 한 칸 띄어쓰기
              for(int h=0; h <= i; h++) System.out.print(" "); 
              
              System.out.println("♡"); // 맨 처음 공백 출력
                                        // -> 하트는 한 칸 띄고 시작하는 모양새
				
              // i 미만까지 반복하면서 한 칸 띄어쓰기
              for(int s=0; s < i; s++) System.out.print(" ");
              
              System.out.print("★");
				
              Thread.sleep(1000); // 1초 일시정지
          }
      } catch (InterruptedException e) {
           Thread.currentThread().interrupt();
      }
   }
}
public class MoveStar implements Runnable{
   @Override
   public void run() {
      try {
         for(int i=0; i < 10; i++) {
            for(int a=0; a<30; a++) System.out.println(); // 30줄 띄우기

            // i 이하만큼 반복하면서 한 칸 띄어쓰기
            for(int h=0; h < i; h++) System.out.print(" ");

            System.out.println("♡"); // 맨 처음 하트부터 출력

            // i 미만까지 반복하면서 한 칸 띄어쓰기
            for(int s=0; s < i; s++) System.out.print(" ");
            
            System.out.print("★"); // 맨 처음 별부터 출력 
                                    // -> 하트와 별 모두 동일선상에서 출발하는 것처럼 보임

            Thread.sleep(1000); // 1초 일시정지
         }
      } catch (InterruptedException e) {
           Thread.currentThread().interrupt();
      }
   }
}
public class MoveRun {
	public static void main(String[] args) {
	   // Runnable을 implements한 객체 활용하여 스레드 생성
       Thread th1 = new Thread(new MoveHeart());
       Thread th2 = new Thread(new MoveStar());
		
       try {
         th2.start(); // 하트와 별이 동일선상에 있는 모습 출력
         
         Thread.sleep(500); // th1, th2의 실행 시간에 0.5초 차이를 줌
         
         th1.start(); // 하트가 별을 앞서는 모습 출력
         // MoveStar와 MoveHeart가 시간 차로 실행되며 
         // 하트와 별이 움직이는 애니메이션 비슷한 결과를 출력함
			
       } catch (InterruptedException e) {
           e.printStackTrace();
       }
   }
}