# 명품 자바 에센셜 연습문제 12장(이론)

- Author: @baealex
- Published: 2018-11-24
- Updated: 2018-11-24
- Source: http://blex.me/@baealex/%EB%AA%85%ED%92%88-%EC%9E%90%EB%B0%94-%EC%97%90%EC%84%BC%EC%85%9C-%EC%97%B0%EC%8A%B5%EB%AC%B8%EC%A0%9C-12%EC%9E%A5%EC%9D%B4%EB%A1%A0
- Tags: 자바에센셜

---

<div class="txc-textbox" style="border-style: solid; border-width: 1px; border-color: rgb(254, 254, 184); background-color: rgb(254, 254, 184); padding: 10px;">
<p>문제와 해답은 직접 작성한 것으로 오타가 있을 수도 있으며 해답역시 틀린 부분이 있을 수 있습니다. 틀린 부분에 대한 지적은 적극 수용하도록 하겠습니다. 문제를 먼저 풀어보시고 참고용으로만 봐주시길
        바랍니다.<br/></p>
</div>

#### 연습문제 12장

1. 일상생활에서 일어나는 멀티태스킹의 사례를 2가지만 찾아보라. 
 <span style="color: rgb(47, 157, 39);">음악을 들으면서 웹서핑한다.</span> <span style="color: rgb(47, 157, 39);"> 피아노를
 </span> <span style="color: rgb(47, 157, 39);">치면서 노래를 부른다.</span>

2. 자바의 멀티태스킹에 대한 설명 중 틀린 것은? 
 ① 자바에서는 다수의 스레드를 가진 멀티스레드를 지원한다. 
 <span style="color: rgb(255, 0, 0);">② 자바에서는
 다수의 프로세스를 가진 멀티프로세스를 지원한다.</span> 
 ③ 자바에서 하나의 JVM은 오직 하나의 응용프로그램만을 실행한다. 
 ④ 자바에서 synchronized는 멀티스레드
 사이의 동기화를 위해 만들어진 것이다. 
 <span style="color: rgb(47, 157, 39);">멀티프로세싱은 프로세스 사이의 변수 통신이 어렵고 오버헤드가 크다.</span>

3. 스레드에 대한 다음 질문에 답하라.

(1) Thread 클래스를 상속받아 스레드를 만들기 위해 반드시 오버라이딩해야 하는 메소드는? 
 <span style="color: rgb(47, 157, 39);">run()</span>

(2) 스레드 객체 생성 후 스레드 실행 시작을 지시하기 위한 메소드는? 
 <span style="color: rgb(47, 157, 39);">start()</span>

(3) 다른 스레드를 종료시키기 위해 InterruptedException을 유발시키는 메소드는? 
 <span style="color: rgb(47, 157, 39);">interrupt()</span>

4. 다음은 Runnable 인터페이스를 이용하여 스레드를 작성하는 코드이다. 스레드는 작동 10초 후에 종료한다. 빈칸을 채워라.

```java
public class MyThread __________ Runnable {
    public void __________() { // 스레드 코드를 작성한다.
        try {
            __________ // 10초 동안 잠을 잔다.
        } catch(InterruptedException e) { return; }
    }
    public static void main(String [] args) {
        Thread th = new Thread(__________);
        __________ // 스레드를 실행시킨다.
    }
}
```

1행: <span style="color: rgb(47, 157, 39);">implement</span> <span style="color: rgb(47, 157, 39);"> </span> 
 2행: <span style="color: rgb(47, 157, 39);">run</span> 
 4행: <span style="color: rgb(47, 157, 39);">sleep(10000)</span> 
 8행: <span style="color: rgb(47, 157, 39);">new MyThread()</span> 
 9행: <span style="color: rgb(47, 157, 39);">th.start();</span>

5. JVM이 자바 응용프로그램을 실행하기 위해 생성하는 기본 스레드를 무엇이라고 부르는가? 이 스레드는 자바 응용프로그램의 어떤 코드에서부터 실행을 시작하는가? 
 <span style="color: rgb(47, 157, 39);">메인(main)
 스레드, 실행 시작 주소는 main() 메소드의 첫 코드부터다.</span>

6. wait(), notify()는 어떤 클래스의 메소드인가? 
 ① Thread 
 ② Runnable 
 <span style="color: rgb(255, 0, 0);">③ Objcet</span> 
 ④
 JVM

7. 동기화가 필요 없는 멀티태스킹 경우는? 
 ① 미디어 플레이어에서, 하드디스크로부터 비디오 스트림을 읽어 공급하는 스레드와 읽은 스트림을 스크린에 출력하는 스레드 
 <span style="color: rgb(255, 0, 0);">②
 스마트폰에서, 문자를 전송하는 스레드와 음악을 연주하는 스레드</span> 
 ③ 웹 서버에서, 접속한 각 사용자마다 로그인 정보 데이터베이스를 기록하는 다수의 스레드 
 ④ 방송
 서버에서, 말하는 사람의 목소리를 샘플링하여 오디오 샘플을 만드는 스레드와 샘플을 청취자의 컴퓨터로 전송하는 스레드 
 <span style="color: rgb(47, 157, 39);">별개의
 작업이므로 동기화가 필요없다.</span>

8. 다음 줄 멀티스레드로 응용프로그램을 작성하면 효과적이지 않은 것은? 그리고 그 이유를 말하라. 
 ① 웹 서버 
 ② 그리기와 프린팅 기능을 동시에 할 수 있는 그래픽 편집기 
 <span style="color: rgb(255, 0, 0);">③ 1에서 100000까지 더하기를 2개의 스레드를 작성하여 한 스레드는 짝수만 더하고, 다른 스레드는 홀수만 더하여 최종적으로 두 합을 더하여
 결과를 내는 응용프로그램</span> 
 <span style="color: rgb(47, 157, 39);">스레드는 작업을 나누어 할 뿐이다. </span> <span style="color: rgb(47, 157, 39);">처리되는
 시간은 동일한 반면에 문맥교환으로 인한 처리 시간의 낭비가 더 발생한다.</span>

9. 다음 줄 한 코드 블록에 두 개 이상의 스레드가 동시에 접근할 때, 먼저 실행을 시작한 스레드가 끝날 때까지 다른 스레드를 대기 상태로 만들기 위해 코드 블록 앞에 사용하는 키워드는 무엇인가? 
 ①
 lock 
 <span style="color: rgb(255, 0, 0);">② synchronized</span> 
 ③ wait 
 ④ notify 
 <span style="color: rgb(47, 157, 39);">공유
 데이터에 접근할 때 순차적으로 처리</span>

10. 어떤 객체 a의 wait() 메소드를 호출하여 대기 상태인 스레드는 어던 경우에 깨어나서 실행을 계속할 수 있는가? 
 <span style="color: rgb(255, 0, 0);">① 다른
 스레드가 객체 a의 notify()를 호출할 때</span> 
 ② 객체 a가 소멸할 때 
 ③ 일정 시간이 지나면 
 ④ 다른 스레드가 객체 a의 wakeup()을 호출할 때
