Skip to content

Instantly share code, notes, and snippets.

@taekwon-dev
Last active November 25, 2024 02:27
Show Gist options
  • Select an option

  • Save taekwon-dev/c4a9943115593864edb5cc1d85e41089 to your computer and use it in GitHub Desktop.

Select an option

Save taekwon-dev/c4a9943115593864edb5cc1d85e41089 to your computer and use it in GitHub Desktop.

| Lifecycle of a Process

image [ 그림 1 ]

이전에 정리했던 프로세스 라이프사이클 을 간단히 정리하면 [ 그림 1 ] 과 같다. 일반적으로 OS CPU 스케줄링 실행 단위를 스레드라고 볼 수 있는데, 자바 스레드의 라이프사이클 역시 위 구조를 따르고 있을지 한 번 알아보자.

| Lifecycle of a Thread in Java

image [ 그림 2 ]

[ 그림 2 ] 를 통해 알 수 있듯이 자바의 스레드의 라이프사이클이 큰 틀에서는 [ 그림 1 ] 과 유사한 것을 확인할 수 있다. 몇 가지 다른 특징들을 정리해보면 다음과 같다.

  • Runnable: 자바 스레드에서는 Ready, Running 상태를 구분하지 않고, 실행 (가능) 상태인 Runnable 상태를 가진다.
  • TIMED_WAITING: 대기 상태를 의미하는 WAITING 뿐만 아니라 일정 시간 제한이 있는 TIMED_WAITING 상태를 가진다. WAITING 과 달리 주어진 시간이 초과하는 경우 이 상태에서 벗어난다.
  • Blocked: 스레드가 락 (자바 모니터 락)을 얻기 위해 대기하는 상태를 의미한다. 예를 들어, synchronized 블록 안으로 진입할 때 이미 다른 스레드가 락을 점유하고 있어 대기할 때 이 상태에 들어간다.

자바 스레드의 상태 및 트랜지션은 앞으로 다룰 interrupt, synchronized, 생산자-소비자 문제 등을 다루면서 자세히 확인해볼 예정이다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment