본문 바로가기
Java

Java Thread를 활용한 경마 예제

by 신입같은 3년차 2017. 7. 17.

Thread를 활용한 간단한 경마 게임입니다.

 

문제 :  Thread를 통하 5개의 말을 생성한다음 start시켜서 각각의 말마다 rank를 적어준다.

         1등 말의경우에는 JOptionPane.showMessageDialog를 통해 1등만 출력해준다

 

 

 

import javax.swing.JOptionPane;

public class ThreadHorse {
	public static void main(String[] args) {

		/** 말 쓰레드 5개 생성*/
//		Horse horse1 = new Horse("최윤진", new Rank());
//		Horse horse2 = new Horse("김윤진", new Rank());
//		Horse horse3 = new Horse("박윤진", new Rank());
//		Horse horse4 = new Horse("심윤진", new Rank());
//		Horse horse5 = new Horse("윤자", new Rank());
//
//		
		/** 말 쓰레드 5개 실행*/
//		horse1.start();
//		horse2.start();
//		horse3.start();
//		horse4.start();
//		horse5.start();

		Thread myThread = null;
		for (int i = 1; i <= 5; i++) {
			myThread = new Horse(i+"번", new Rank());
			myThread.start();
		}
		
		
	} // end of main
} // end of class

class Horse extends Thread {
	/** 말의 이름 */
	String h_name = "";

	/** 총길이 */
	int meter = 100;

	/** 등수 매길 static 변수 */
	static int count = 1;

	/** Rank클래스 */
	Rank rank;

	/** 기본생성자 */
	public Horse() {
		// TODO Auto-generated constructor stub
	}

	/** 말의 이름과 객체를 만들 Rank생성 */
	public Horse(String h_name, Rank rank) {
		this.h_name = h_name;
		this.rank = rank;
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		try {
			while (true) {
				/** 1~2000 사이의 난수 발생후 sleep */
				sleep((int) (Math.random() * 2000 + 1));

				System.out.println(h_name + " 말의 남은 거리 : " + meter);

				/** 말이 20미터 단위로 이동 */
				meter -= 20;

				/** meter가 0이되면 결승점이기 때문에 rank.finishLine(말의 이름)실행 */
				if (meter == 0) {
					this.rank.finishLine(h_name);
					break;
				}
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
		}
	}

}

class Rank {
	/** 말의 등수 */
	int rank;

	public Rank() {
		// TODO Auto-generated constructor stub
	}

	public void finishLine(String name) {
		// TODO Auto-generated method stub
		rank = Horse.count++;
		System.out.println(name + " 말 " + rank + "등으로 결승점 도착");

		/** 1등 말일 경우 JOptionPane.showMessageDialog로 띄어준다 */

		if (rank == 1) {
			/** 첫번째 매개변수는 Frame지정인데 없기때문에 기본frame로 띄운다 없으면 null지정 가능. */
			JOptionPane.showMessageDialog(null, "1등말은 " + name + " 입니다 !!");
		}

	}

}

반응형

'Java' 카테고리의 다른 글

Java IO패키지  (0) 2017.07.20
Java Attach Source 설정하기.  (1) 2017.07.18
Java Thread implement로 실행하기  (0) 2017.07.16
Java 기본 Thread 사용법  (0) 2017.07.16
Java try ~ catch ~ finally 추가 ( multi catch )  (0) 2017.07.16

댓글