본문 바로가기

Programming/JAVA

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

JAVA logo image

 

 

 

앞서서 작업 스레드를 사용하지 않고 비프음을 내는 예제를 살펴보았었습니다. 

 

import java.awt.Toolkit;

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

 

 

위의 예제는 [메인 스레드]만을 사용한 예제라는 것을 이제 이해하셨을 겁니다. 위와 똑같은 작업을 [작업 스레드]까지 사용해서 비프 사운드와 텍스트 "띵~"이 동시에 출력되도록 만들어 보겠습니다. 

 

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

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

 

 

// ExampleMain.java
// 메인 스레드

import java.awt.Toolkit;

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

 

 

위와 같이 메인 스레드를 실행하게 되면 "띵~"이라는 텍스트와 비프음이 동시에 하나씩 출력되는 것을 확인할 수 있습니다.

 

 

 


 

 

 

이번에는 ExampleMain 파일 내에서 익명 객체와 람다식을 사용해서 작업 스레드를 선언하는 예제를 살펴보겠습니다. 위의 예제에서 Runnable beepTask = new BeepTask( ); 라인을 삭제하고, 익명 객체로 run( )을 선언해 보겠습니다.

 

import java.awt.Toolkit;

public class ExampleMain {
	public static void main(String[] args) {
		Thread thread = new Thread(new Runnable() {
			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) {}
		}
	}
}

 

 

이번엔 위의 예제를 람다식으로 표현해 보겠습니다. 

 

import java.awt.Toolkit;

public class ExampleMain {
	public static void main(String[] args) {
		Thread thread = new Thread(() -> {
				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) {}
		}
	}
}