쓰레드 기본 정보
- 스레드 ID - 스레드의 고유 식별자, 스레드 생성 시 할당되고, 지정할 수 없다.
- 스레드 이름 - 내가 지정할 수 있고, 중복될 수 있다.
- 스레드 우선순위 - 1(낮음) ~ 10(높음), 기본값은 5, 절대적인 실행순서는 아니다.(힌트)
- 힌트라는 말은, 스케줄러가 '참고'하는 대상으로 인식한다는 정도
- 스레드 그룹 - 스레드가 속한 그룹, 자주 사용하지는 않음
- 부모 스레드 - 모든 스레드는(main 제외) 누군가가 생성해준다. 나를 생성해준 스레드가 부모 스레드
- 스레드 상태 - 스레드의 현재 상태
- NEW - 스레드가 생성되고 아직 실행되진 않은 상태
- RUNNABLE - 스레드를 실행중이거나, 실행될 준비가 된 상태
- BLOCKED - 동기화 락을 기다리는 상태
- WATING - 다른 스레드의 작업이 완료되기를 기다리는 상태
- TIMED_WATING - '일정기간' 동안 기다리는 상태
- TERMINATED - 스레드가 실행을 마친 상태
- 한번 종료된 스레드는 다시 실행할 수 없다.
- 스레드마다 주어진 스택이 텅 비어지기 떄문에
쓰레드 생명주기
- NEW
- 스레드 생성 후 시작되지 않은 상태
- Thread 객체 생성, start() 메소드 실행 전
- RUNNABLE
- 스레드가 실행될 준비가 된 상태
- start() 메소드 호출 시 해당 상태로 진입
- 모든 스레드가 동시에 실행되는 것은 아니다.
- 운영체제의 스케줄러에 의해 CPU 시간을 할당
- 스케줄러의 대기열에 포함되어 차례대로 실행
- 너무나 빠르게 실행과 대기열 대기가 반복되기 때문에 이 상태를 구분할 수 없다.
- '실행 상태' 라고도 부른다
- BLOCKED
- 다른 스레드에 의해 동기화 락을 얻기 위해 기다리는 상태
- WAITING
- 다른 스레드의 특정 작업이 끝나기를 기다리는 상태
- wait(), join() 메서드 호출 시
- TIMED WAITING
- 특정 시간동안 다른 스레드의 작업이 끝나기를 기다리는 상태
- '특정 시간'이라는 제한이 들어간다
- 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 |