본문 바로가기
혼공자

[혼공단 7기] 혼자 공부하는 자바 4주차

by 도리에몽 2022. 2. 13.

▷ 기본 미션: p.550 [직접 해보는 손코딩] 코딩 과정 및 실행 결과 캡쳐하기

- AutoSaveThread.java

//1초 주기로 save() 메서드를 호출하는 데몬 스레드
package sec02.exam05;

public class AutoSaveThread extends Thread {
	public void save() {
		System.out.println("작업 내용을 저장함.");
	}
	
	@Override
	public void run() {
		while(true) {
			try {
				Thread.sleep(1000);
			} catch(InterruptedException e) {
				break;
			}
			save();
		}
	}
}

- DaemonExample.java

//메인 스레드가 실행하는 코드
package sec02.exam05;

public class DaemonExample {
	public static void main(String[] args) {
		AutoSaveThread autoSaveThread = new AutoSaveThread();
		autoSaveThread.setDaemon(true);
		autoSaveThread.start();
		
		try {
			Thread.sleep(4000);
		} catch(InterruptedException e) {
			
		}
		System.out.println("메인 스레드 종료");
	}
}

- 실행 결과

1초 주기로 데몬 스레드의 sava() 메소드가 호출되어 "작업 내용을 저장함."을 출력한다. 4초가 지나면 메인 스레드가 종료되는데, 그때 "메인 스레드 종료" 문장이 출력되고 데몬 스레드도 자동 종료된다.

 

▷ 선택 미션: p.539 문제 2번 풀고, 풀이 과정 설명하기

- ThreadExample.java

package sec01.verify.exam02;

public class ThreadExample {
	public static void main(String[] args) {
		Thread thread1 = new MovieThread();
		thread1.start();
		
		Thread thread2 = new Thread(new MusicRunnable());
		thread2.start();
	}
}

- MovieThread.java

package sec01.verify.exam02;

public class MovieThread extends Thread {
	@Override
	public void run() {
		for(int i = 0; i < 3; i++) {
			System.out.println("동영상을 재생합니다.");
			try {
				Thread.sleep(1000);
			} catch(InterruptedException e) {
				
			}
		}
	}
}

- MusicRunnable.java

package sec01.verify.exam02;

public class MusicRunnable implements Runnable {
	@Override
	public void run() {
		for(int i = 0; i < 3; i++) {
			System.out.println("음악을 재생합니다.");
			try {
				Thread.sleep(1000);
			} catch(InterruptedException e) {
				
			}
		}
	}
}

- 실행 결과

 

- 풀이 과정

new MusicRunnable()

Thread 클래스로부터 작업 스레드 객체를 직접 생성하려면 MusicRunnable을 매개값으로 갖는 생성자를 호출해야 한다.

 

extends Thread

Thread를 상속받는 MovieThread 클래스를 생성한다.

 

implements Runnable

Runnable은 작업 스레드가 실행할 수 있는 코드를 가지고 있는 객체이다. Runnable은 인터페이스 타입이므로 구현 객체를 만들어서 대입해야 한다. Runnable에는 run()메소드 하나가 정의되어 있는데, 구현 클래스는 run()을 재정의해서 작업 스레드가 실행할 코드를 작성해야 한다.