문제1.

Java의 쓰레드는 JVM 프로세스 위에서 실행된다.

  1. 쓰레드의 생성은 누가 수행할까? jvm

  2. 쓰레드의 관리는 누가 수행할까? 커널

  3. 자바는 어떤 사용자-커널 매핑 방식을 이용할까?(1:1, 1:다, 다:다)

자바는 호스트 os에서 위에서 돌아가서 각각의 호스트의 스레딩 모델 방식을 따른다.

→ 1대 1 이라고 한다. jvm이 스레드를 생성해서 각각의 스레드는 독립적으로 실행돼야하는데, 만약 일대다 방식을 사용하게 되면 실행돼야하는 스레드가 락이 걸리기 때문에 될 수가 없다. 그래서 1대1방식이다. 내부 동작을 뜯어보면 start0()를 사용하여 스레드를 매핑하는 것을 볼 수 있다.

문제2.

Java에서 쓰레드를 생성하는 방법은 크게 2가지가 있다. 각각을 설명하고 코드로 작성할 수 있다면 해보자

Task 클래스를 통해 직접 객체를 만들어 쓰레드를 직접 생성하는 방법과 Executor인 인터페이스를 통해 스레드 생성을 따로 관리하는 방법이 있다.

→ thread를 이용하여 직접 넘겨주는 방식과 Runnable을 사용하여 한 번 걸처서 넘겨주는 방식이 있다

문제3.

쓰레드의 생명주기에 대해 설명하시오.(그림 가능)

  1. 객체 생성 (new)
  2. 실행대기 (Runnable)
  3. 실행 (Running)
  4. 일시 정지 (Blocked) - lock이 걸려 잠시 정지
  5. 정지 (wait) - 다른 스레드를 기다리는 상태
  6. 일시정지(Timed - wait) - 일정시간 동안 정지