2013년 7월 3일 수요일

(130703) 8일차 ThreadTestEx.java, ThreadTestEx2.java (Thread를 이용한 경마 프로그램)

 - ThreadTestEx.java 소스 (Runnable interface을 구현 - implements)
public class ThreadTestEx implements Runnable {

/*
* 3개의 객체를 쓰레드로 만듬
* 각각의 객체는 1~5까지의 랜덤한 수를 입력 받을 수 있음
* 이렇게 입력받은 값을 누적시켜서 50의 숫자에 가장 먼저 도달한 객체의 이름을 화면에 출력하시오.
* 쓰레드 주기는 1초를 주시오. sleep(1000);
*/

String name;
int num;

@Override // Thread class는 Runnable을 implements했다.

public void run(){
try{
while(true){
Thread.sleep(1000); // 1초마다 한번씩 번갈아가면서 실행
this.num += (int)(Math.random()*5)+1;
System.out.println(this.num);
if(this.num > 50)
break;
}
System.out.println(name);
}
catch (Exception e){
e.printStackTrace();
}
}

public ThreadTestEx(String data){

name = data;
}

public static void main(String[] args) {

ThreadTestEx tt1 = new ThreadTestEx("1번 말");
ThreadTestEx tt2 = new ThreadTestEx("2번 말");
ThreadTestEx tt3 = new ThreadTestEx("3번 말");

// Runnable 인터페이스를 상속받았기에, start 메소드를 사용할 수 없다.
  // 쓰레드 객체를 생성 해야만 쓰레드 클래스에 있는 start 메소드를 호출할 수 있음
Thread t1 = new Thread(tt1);
t1.start();
Thread t2 = new Thread(tt2);
t2.start();
Thread t3 = new Thread(tt3);
t3.start();
}
}


 - 결과






















 - ThreadTestEx2.java 소스 (Thread class를 이용 - extends)

public class ThreadTestEx2 extends Thread {

/*
* 3개의 객체를 쓰레드로 만듬
* 각각의 객체는 1~5까지의 랜덤한 수를 입력 받을 수 있음
* 이렇게 입력받은 값을 누적시켜서 50의 숫자에 가장 먼저 도달한 객체의 이름을 화면에 출력하시오.
* 쓰레드 주기는 1초를 주시오. sleep(1000);
*/

String name;
static int i = 1;

@Override // Thread class는 Runnable을 implements했다.

public void run(){
try{
// 객체 누적시킬 변수 선언
int temp = 0;

while(true){
Thread.sleep(1000); // 1초마다 한번씩 번갈아가면서 실행
temp += (int)(Math.random()*5)+1;
System.out.println(temp);
if(temp > 50){
System.out.println(name + "이 " +i+"등 입니다.");
i++;
break;
}
}
System.out.println(name);
}
catch (Exception e){
e.printStackTrace();
}
}

public ThreadTestEx2(String data){
name = data;
}

public static void main(String[] args) {

ThreadTestEx2 tt1 = new ThreadTestEx2("1번 ");
ThreadTestEx2 tt2 = new ThreadTestEx2("2번 ");
ThreadTestEx2 tt3 = new ThreadTestEx2("3번 ");

// 쓰레드 적용
tt1.start();
tt2.start();
tt3.start();
}
}


 - 결과