본문 바로가기

Programming/JAVA

멀티 스레드(2) - 작업 스레드 개념 : Thread 하위 클래스로부터 생성 2

 

 

이제 우리가 앞선 아티클에서 Runnable을 생성해 만들었던 비프음+"띵~" 텍스트 출력 예제를 Thread 하위 클래스를 이용해서 구현해 보겠습니다. 

 

// BeepTask.java
import java.awt.Toolkit;

public class BeepThread extends Thread {
	@Override
	public void run() {
		Toolkit toolkit = Toolkit.getDefaultToolkit();
		for(int i = 0; i < 5; i++) {
			toolkit.beep();
			try { Thread.sleep(500); } catch(Exception e) {}
		}
	}
}

 

위에서는 Runnable을 구현하는 클래스가 아닌 Thread를 상속하는 클래스로 선언했습니다. 그리고나서 run( ) 메서드를 오버라이드 해서 작업내용을 선언했습니다. 

 

이제 이 BeepThread 클래스를 사용해서 실행을 진행해 보겠습니다.

 

// ExampleMain.java
import java.awt.Toolkit;

public class ExampleMain {
	public static void main(String[] args) {
		Thread thread = new BeepThread();
		thread.start();
		
		for(int i=0; i<5; i++) {
			System.out.println("띵~");
			try { Thread.sleep(500); } catch(Exception e) {}
		}
	}
}

 

 

위 예제를 실행하면, 지금까지 작업 스레드를 통해 작성했던 예제와 마찬가지로 "띵~" 텍스트와 사운드가 동시에 출력되는 것을 확인할 수 있습니다. 참고로, 역시 여기서도 익명 객체를 이용한 방식으로도 구현이 가능합니다. 

 

import java.awt.Toolkit;

public class ExampleMain {
	public static void main(String[] args) {
		Thread thread = new Thread() {
			@Override
			public void run() {
				Toolkit toolkit = Toolkit.getDefaultToolkit();
				for(int i = 0; i < 5; i++) {
					toolkit.beep();
					try { Thread.sleep(500); } catch(Exception e) {}
				}
			}
		};
		
		thread.start();
		
		for(int i=0; i<5; i++) {
			System.out.println("띵~");
			try { Thread.sleep(500); } catch(Exception e) {}
		}
	}
}

 

 

여기서 thread에서는 Thread의 익명객체를 대입하게 되는데, 이 익명 객체는 (기본 개념과 같이)Thread 클래스를 상속하는 익명의 자식 클래스가 되는 개념입니다.