컴퓨터 & 코딩/Java

[혼공학습단 10기][혼공자] 4주차 미션

구로그 2023. 7. 17. 15:58
728x90

 


✏️ 진도: Chapter 12 (스레드)

1. 멀티스레드

2. 스레드 제어


 

 

 

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

 

❗️교재에 나와 있는 [직접 해보는 손코딩]대로 써보면 다음과 같이 '작업 내용을 저장함.'이 두 번만 출력된다.

0초
1초 - "작업 내용을 저장함." 출력
2초 - "작업 내용을 저장함." 출력
3초 - "메인 스레드 종료" 출력

 

 

 

❗️그러나 save()메소드의 실행위치를 바꾸면 교재의 실행결과 처럼 '작업 내용을 저장함'이 세 번 출력된다. 

0초 - "작업 내용을 저장함." 출력 

1초 - "작업 내용을 저장함." 출력

2초 - "작업 내용을 저장함." 출력

3초 - "메인 스레드 종료" 출력

 

 

 

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

 

❓동영상과 음악을 재생하기 위해 두 가지 스레드를 실행하려고 합니다. 빈칸 1 ~ 3 에 적당한 코드를 넣어보세요.

package sec01.exam02;

public class ThreadExample {

	public static void main(String[] args) {
		Thread thread1 = new MovieThread();
		thread1.start();
		
		Thread thread2 = new Thread(new MusicRunnable()); // 1번 빈칸 new MusicRunnable()
		thread2.start();
	}
}
package sec01.exam02;

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

}
package sec01.exam02;

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

✅ 1번 빈칸: 작업 스레드를 Thread 클래스로부터 직접 생성하는 방식으로 Runnable을 매개값으로 갖는 생성자를 호출해야 하며 Runnable이 인터페이스 타입이기 때문에 구현 객체를 만들어야 한다. 따라서 여기에는 new MusicRunnable()이 들어간다. 

 

✅ 2번 빈칸: 작업 스레드가 실행할 작업을 Runnable로 만들지 않고 Thread의 하위 클래스로 작업 스레드를 정의하는 방법을 쓰고 있다. 따라서 Thread 클래스를 상속해야 하므로 2번 빈칸에는 extends Thread가 들어간다. 

 

✅ 3번 빈칸: Runnable이 인터페이스 이기 때문에 Runnable의 구현 클래스 MusicRunnable에 있는 3번 빈칸에는 implements Runnable이 들어간다. 

반응형