Java/김영한의 실전자바

스레드 제어

슈코 2024. 8. 22. 21:47

쓰레드 기본 정보


  • 스레드 ID - 스레드의 고유 식별자, 스레드 생성 시 할당되고, 지정할 수 없다.
  • 스레드 이름 - 내가 지정할 수 있고, 중복될 수 있다.
  • 스레드 우선순위 - 1(낮음) ~ 10(높음), 기본값은 5, 절대적인 실행순서는 아니다.(힌트)
    • 힌트라는 말은, 스케줄러가 '참고'하는 대상으로 인식한다는 정도
  • 스레드 그룹 - 스레드가 속한 그룹, 자주 사용하지는 않음
  • 부모 스레드 - 모든 스레드는(main 제외) 누군가가 생성해준다. 나를 생성해준 스레드가 부모 스레드
  • 스레드 상태 - 스레드의 현재 상태
    • NEW - 스레드가 생성되고 아직 실행되진 않은 상태
    • RUNNABLE - 스레드를 실행중이거나, 실행될 준비가 된 상태
    • BLOCKED - 동기화 락을 기다리는 상태
    • WATING - 다른 스레드의 작업이 완료되기를 기다리는 상태
    • TIMED_WATING - '일정기간' 동안 기다리는 상태
    • TERMINATED - 스레드가 실행을 마친 상태
      • 한번 종료된 스레드는 다시 실행할 수 없다.
      • 스레드마다 주어진 스택이 텅 비어지기 떄문에

 

쓰레드 생명주기


  1. NEW
    • 스레드 생성 후 시작되지 않은 상태
    • Thread 객체 생성, start() 메소드 실행 전
  2. RUNNABLE
    • 스레드가 실행될 준비가 된 상태
    • start() 메소드 호출 시 해당 상태로 진입
    • 모든 스레드가 동시에 실행되는 것은 아니다.
      • 운영체제의 스케줄러에 의해 CPU 시간을 할당
      • 스케줄러의 대기열에 포함되어 차례대로 실행
      • 너무나 빠르게 실행과 대기열 대기가 반복되기 때문에 이 상태를 구분할 수 없다.
    • '실행 상태' 라고도 부른다
  3. BLOCKED
    • 다른 스레드에 의해 동기화 락을 얻기 위해 기다리는 상태
  4. WAITING
    • 다른 스레드의 특정 작업이 끝나기를 기다리는 상태
    • wait(), join() 메서드 호출 시
  5. TIMED WAITING
    • 특정 시간동안 다른 스레드의 작업이 끝나기를 기다리는 상태
    • '특정 시간'이라는 제한이 들어간다
  6. TERMINATED
    • 스레드 실행 완료
    • 정상 종료 or 예외 종료
    • 종료되면, 다시 시작할 수 없다

'Java > 김영한의 실전자바' 카테고리의 다른 글

스레드 - interrupt()  (0) 2024.09.03
스레드 - join()  (0) 2024.08.26
스레드의 생성과 실행  (0) 2024.08.15
프로세스와 스레드  (0) 2024.08.13
[김영한의 실전 자바 - 기본편] 기본형과 참조형  (0) 2024.01.21