쓰레드 동작 순서
쓰레드 스케쥴링
운영체제가 CPU자원을 여러 쓰레드들 간에 할당하는 과정
우선 순위, 실행시간, 상태 등을 고려하여 CPU를 각 쓰레드들에게 적절하게 할당하여 시스템 전체의 성능을 향상시킵니다.
쓰레드 상태
- NEW : 쓰레드가 생성되고 아직 start()가 호출되지 않은 상태
- RUNNABLE : 실행 중 또는 실행 가능한 상태
- BLOCKED : 동기화 블럭에 의해서 일시정지된 상태 ( Lock이 풀릴 때까지 기다리는 상태 )
- WAITING, TIMED_WAITING : 쓰레드의 작업이 종료되지는 않았지만 실행가능하지 않은 일시정지된 상태
- TERMINATED : 쓰레드의 작업이 종료된 상태
실행 대기열
- QUEUE와 같은 구조로, 다음 실행을 위해 대기하는 상태
쓰레드 스케쥴링 과정
- 쓰레드 생성
- start() : 실행 대기열에 추가
- 자신의 차례가 되면 실행
- 실행 : 실행 중에는 하나의 쓰레드만 잡을 수 없기 때문에 제한 시간을 가지고 있다.
- 시간이 다 되거나, yield()를 만나면 다시 실행 대기 상태로 간다.
- 실행 중 중단 : Suspend, sleep, wait, join, i/o block에 의해 일시정지가 가능
- I/O 블럭 : 각 I/O의 대기열에 줄서게 된다. 입출력을 완성되기 전까지 지연한다.
- 일시정지 시간이 다 되면
- Time-out, notify, resume, interrupt가 발생
Deadlock ( 교착상태 )
여러 프로세스가 서로 상대방의 자원을 이용하기 위해 기다리는 상태
이때 중요한 것은, 서로 대기하며 교착상태가 되어 시스템이 응답하지 않는 상태가 된다.
Thread에서 제공하는 suspend, resume, stop의 경우 deadlock을 만들기 쉽기 때문에 사용하지 않는다.
'JAVA > 자바스터디' 카테고리의 다른 글
[자바스터디] 쓰레드 (0) | 2023.01.28 |
---|---|
[자바스터디] Generic vs Object (0) | 2023.01.28 |
[자바스터디] Generic (0) | 2023.01.28 |
[자바 스터디] for vs foreach vs iterator (0) | 2023.01.28 |
[자바스터디] Collection - Collections (0) | 2023.01.22 |