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


문제와 해답은 직접 작성한 것으로 오타가 있을 수도 있으며 해답역시 틀린 부분이 있을 수 있습니다. 틀린 부분에 대한 지적은 적극 수용하도록 하겠습니다. 문제를 먼저 풀어보시고 참고용으로만 봐주시길 바랍니다.



연습문제 12장

1. 일상생활에서 일어나는 멀티태스킹의 사례를 2가지만 찾아보라.
음악을 들으면서 웹서핑한다. 피아노를 치면서 노래를 부른다.

2. 자바의 멀티태스킹에 대한 설명 중 틀린 것은?
① 자바에서는 다수의 스레드를 가진 멀티스레드를 지원한다.
② 자바에서는 다수의 프로세스를 가진 멀티프로세스를 지원한다.
③ 자바에서 하나의 JVM은 오직 하나의 응용프로그램만을 실행한다.
④ 자바에서 synchronized는 멀티스레드 사이의 동기화를 위해 만들어진 것이다.
멀티프로세싱은 프로세스 사이의 변수 통신이 어렵고 오버헤드가 크다.


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

(1) Thread 클래스를 상속받아 스레드를 만들기 위해 반드시 오버라이딩해야 하는 메소드는?
run()

(2) 스레드 객체 생성 후 스레드 실행 시작을 지시하기 위한 메소드는?
start()

(3) 다른 스레드를 종료시키기 위해 InterruptedException을 유발시키는 메소드는?
interrupt()


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

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

1행 : implement 
2행 : run
4행 : sleep(10000)
8행 : new MyThread()
9행 : th.start();


5. JVM이 자바 응용프로그램을 실행하기 위해 생성하는 기본 스레드를 무엇이라고 부르는가? 이 스레드는 자바 응용프로그램의 어떤 코드에서부터 실행을 시작하는가?
메인(main) 스레드, 실행 시작 주소는 main() 메소드의 첫 코드부터다.


6. wait(), notify()는 어떤 클래스의 메소드인가?
① Thread
② Runnable
③ Objcet
④ JVM


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


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

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


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


이 글이 도움이 되었나요?

신고하기
0분 전
작성된 댓글이 없습니다. 첫 댓글을 달아보세요!
    댓글을 작성하려면 로그인이 필요합니다.