반응형
package multi_thread;

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) {}
		}
	}
}
package multi_thread;

import java.awt.Toolkit;

public class BeepPrintExample2 {

	public static void main(String[] args) {

		// 기존 방법
        // Runnable beepTask = new BeepTask(); // Runnable 상속 받은 BeepTask 클래스
		// Thread thread = new Thread(beepTask);

		// 방법1 (Runnable 객체 선언 후 Injection 안 해줘도 된다.
		Thread thread = new BeepThread();
		thread.start();
        

		
		// 방법2 (익명 객체를 이용한 방법)
		/*
		Thread thread2 = new Thread() {
			public void run() {
				Toolkit toolkit = Toolkit.getDefaultToolkit();
				for(int i = 0 ; i < 5 ; i++) {
					toolkit.beep();
					try {Thread.sleep(500);} catch(Exception e) {}
				}
			}
		};
		thread2.start();
		*/
		
		for (int i = 0 ; i < 5 ; i++) {
			System.out.println("띵");
			try {Thread.sleep(500);} catch(Exception e) {}
		}

	}

}

Runnable을 이용하지 않고 Thread의 하위 클래스로 스레드를 정의하면서 작업 내용을 포함 시킬 수도 있습니다.

 

extends로 Thread를 받고 run() 안에 스레드 실행할 코드를 정의합니다.

아니면 저번에 한 거 처럼 익명객체로 이용해 클래스 생성하지 않고 사용할 수 있습니다.

 

Thread thread = new BeepThread();

 

Thread를 상속 받는 BeepThread하위 클래스 입니다.

큰 Thread에 담게 되는 것이죠 Runnable역할을 해주면서 코드를 더 줄일 수 있습니다.

 

반응형