본문 바로가기
Java/기초

[java] 스레드(Thread)[2] - Runnable을 이용하여 구현하는 방법

by EricJeong 2019. 7. 27.

스레드를 만드는 방법 중 black-box 방법으로 알려진 Runnable 인터페이스를 구현하는 방법에 대해 알아보겠습니다.

 

스레드를 만드는 방법은 white-box방법과 black-box방법이 있습니다.

white-box방법은 java.lang.Thread 객체를 extend하여 만드는 것이고,

black-box 방법은 java.lang.Runnable 인터페이스를 implements 하여 만드는 것입니다.

 

white-box방식으로 제작한 스레드는 컴파일 타임 시점에 형식이 결정되어 동적인 기능 변경이 불가능하다는 단점이 있습니다.

 

 

반면 스레드를 Runnable객체로 만들게 되면 스레드를 상속받아 만드는 white-box방식에 비해 어플리케이션의 유연성과 확장성을 보장받을 수 있게 됩니다.

 

 

 

Runnable로 스레드 만드는 방법

 

1. class를 선언하고 Runnable 인터페이스를 implements한다.

class '클래스 이름' implements Runnable

 

 

2. run() 메서드를 오버라이드하여 구현한다.

 

	@Override
	public void run() {
		// 이곳에 실행할 코드를 작성하시면 됩니다.
		// 이 스레드는 자신의 번호를 3번 반복해서 출력합니다.
		for(int i=0; i<3; i++) {
			System.out.println("제 번호는  " + num + "입니다.");
		}
	}

 

 

3. Thread 객체를 생성하고, 생성자로 만든 객체를 넣어준다.

 

		// 1. Runnable 인터페이스를 상속한 객체를 구현합니다.
		RunnableTest runnableTest1 = new RunnableTest();
		RunnableTest runnableTest2 = new RunnableTest();
		RunnableTest runnableTest3 = new RunnableTest();
		RunnableTest runnableTest4 = new RunnableTest();
		RunnableTest runnableTest5 = new RunnableTest();
		
		// 2. Thread 객체의 생성자로 위 객체를 전달합니다.
		Thread thread1 = new Thread(runnableTest1);
		Thread thread2 = new Thread(runnableTest2);
		Thread thread3 = new Thread(runnableTest3);
		Thread thread4 = new Thread(runnableTest4);
		Thread thread5 = new Thread(runnableTest5);

 

4. 만든 객체의 start() 메서드를 실행한다.

 

		thread1.start();
		thread2.start();
		thread3.start();
		thread4.start();
		thread5.start();

 

 

 

 

위 예제의 전체 코드

package example;

public class RunnableTest implements Runnable{
	int num;
	
	public RunnableTest() {
		// 0~99의 숫자중 하나의 값을 랜덤으로 지정합니다.
		this.num = (int)(Math.random()*100);
	}
	
	
	@Override
	public void run() {
		// 이곳에 실행할 코드를 작성하시면 됩니다.
		// 이 스레드는 자신의 번호를 3번 반복해서 출력합니다.
		for(int i=0; i<3; i++) {
			System.out.println("제 번호는  " + num + "입니다.");
		}
	}
	
	
	
	public static void main(String[] args) {
		// 1. Runnable 인터페이스를 상속한 객체를 구현합니다.
		RunnableTest runnableTest1 = new RunnableTest();
		RunnableTest runnableTest2 = new RunnableTest();
		RunnableTest runnableTest3 = new RunnableTest();
		RunnableTest runnableTest4 = new RunnableTest();
		RunnableTest runnableTest5 = new RunnableTest();
		
		// 2. Thread 객체의 생성자로 위 객체를 전달합니다.
		Thread thread1 = new Thread(runnableTest1);
		Thread thread2 = new Thread(runnableTest2);
		Thread thread3 = new Thread(runnableTest3);
		Thread thread4 = new Thread(runnableTest4);
		Thread thread5 = new Thread(runnableTest5);
		
		thread1.start();
		thread2.start();
		thread3.start();
		thread4.start();
		thread5.start();
	}
}

 

 

 

실행 결과

 

 

 

댓글