[명품자바] 13장 연습문제

sum·2022년 6월 13일
0

1

일상생활에서 일어나는 멀티태스킹의 사례를 2가지만 찾아보라.
미디어 플레이어, 테트리스

2

자바의 멀티태스킹에 대한 설명 중 틀린 것은?

  1. 자바에서는 다수의 스레드를 가진 멀티스레드를 지원한다.
  2. 자바에서는 다수의 프로세스를 가진 멀티프로세스를 지원한다.
  3. 자바에서는 하나의 JVM은 오직 하나의 응용 프로그램만 실행한다.
  4. 자바에서는 synchronized는 멀티스레드 사이의 동기화를 위해 만들어진 것이다.

3

스레드를 만들기 위해 Thread를 상속받아 오버라이딩하여야 하는 메소드는 무엇인가?

  1. run()
  2. start() //스레드 시작
  3. sleep() // () 안의 밀리초 시간 동안 잠을 자고 있는 상태
  4. wait()와 notify() //다른 스레드가 notify() 불러줄 때까지 대기/wait()을 호출하여 대기중인 스레드를 깨우고 RUNNABLE 상태로 만듦

4

스레드의 코드는 run()에 작성한다. run()메소드를 호출하는 것은 누구인가?

  1. 자바가상기계(JVM)
  2. start()
  3. 응용프로그램
  4. 이벤트 분배 스레드

5

우선순위 값이 8인 스레드 A와 우선순위 값이 3인 스레드 B, C의 3개의 스레드가 있다고 할 때, 질문에 답하라.

  1. 자바 스레드의 우선순위 값의 범위는 무엇인가?
    1에서 10 사이
  2. 자바의 스레드 스케줄링 정책은 무엇인가?
    철저한 우선순위 기반으로, 가장 우선순위가 높은 스레드가 우선적으로 스케줄링되고 동일한 우선순위의 스레드는 돌아가면서 실행되는 라운드 로빈 정책도 있다.
  3. 스레드 B는 언제 실행될 수 있는가?
    스레드 A가 종료/sleep()을 호출하여 잠/입출력을 호출하여 block 상태/wait()을 호출하여 다른 스레드가 notify()를 불러주기를 무한정 기다리고 있을 때 스레드 B가 실행될 수 있다.
  4. 스레드 A, B, C가 모두 실행 준비 상태일 때, 항상 스레드 A가 선택돼 실행되는가?
    우선순위가 가장 높기 때문에 그렇다.
  5. 스레드 A가 완전히 종료하였을 때, 스레드 B와 C는 어떤 순서로 스케줄링되는가?
    JVM이 선택하는 순서대로 짧은 시간 동안 나누어 번갈아 실행된다.
  6. 스레드 A가 실행 도중 네트워크로부터 데이터 도착을 기다리게 되었을 때, 스레드 B와 C 중 하나로 스케줄링이 변하게 되는가? 아니면, 스레드 A의 우선순위가 높기 때문에 종료할 때까지 스레드 B, C에게 실행 기회가 주어지지 않는가?
    스레드 A는 block 상태이므로 네트워크로부터 데이터가 도착할 때까지 실행시키지 않는다. 대신 스레드 B 또는 C 중 하나를 선택하여 실행 기회를 준다.

6

다음 중 static 타입으로서, 어떤 코드에서도 호출할 수 있는 Thread 클래스의 메소드는?

  1. sleep()
  2. run()
  3. start()
  4. interrupt()

7

한 코드 블록에 2개 이상의 스레드가 동시에 접근할 때, 먼저 실행한 스레드가 완전히 실행을 끝날 때까지 다른 스레드가 실행하지 못하고 대기 상태로 만들기 위해 코드 블록 앞에 사용하는 키워드는?

  1. static
  2. synchronized
  3. lock
  4. wait

8

다음 각 경우에 동기화가 필요한지 말하라.

  1. 스마트폰에서 문자를 전송하는 스레드와 음악을 연주하는 스레드
    필요없다.
  2. 미디어 플레이어에서, 하드디스크로부터 비디오 프레임을 읽어 공급하는 스레드와 읽은 프레임을 스크린에 그리는 스레드
    프레임이 공유되기 때문에 필요하다.
  3. 온도 센서로부터 주기적으로 값을 읽어 오는 스레드와 습도 센서로부터 주기적으로 값을 읽어오는 스레드
    필요없다.
  4. 웹 서버에서 접속한 사용자마다 로그인 정보를 데이터베이스에 기록하는 다수의 스레드
    필요하다.

9

객체 obj가 wait() 메소드를 호출하여 현재 대기 상태에 있는 스레드는 어떤 경우에 깨어나 실행을 계속할 수 있는가?

  1. 다른 스레드가 객체 obj의 notify()를 호출할 때
  2. 일정 시간이 지나면
  3. 다른 스레드가 모두 죽어 자신만 살아 있게 되었을 때
  4. 객체 obj가 소멸될 때

10

다음은 MyThread의 스레드를 생성하고 실행하는 코드이다. 스레드가 작동한 후 5초 후에 스레드가 종료하도록 빈칸을 채워라. 약간 까다로운 문제임을 유의하라.

class MyThread ___________ {
	public void __________ {//스레드 코드를 작성한다.
    try {
    	_______________ //5초 동안 잠든다.
    } catch(___________ e) { return; }
    }
    
    public static void main(String[] args) {
    	Thread th = new Thread(________);
        _________________ //스레드를 실행시킨다.
    }
}

implements Runnable / run() / sleep(5000) / InterruptedException / new MyThread() / th.start();

0개의 댓글