자바의 스레드 생명주기 – 자바의 스레드 상태

이해하기 Java에서 스레드 생명주기스레드 상태는 스레드 및 다중 스레드 환경에서 프로그래밍할 때 매우 중요합니다. 지난 강의에서 우리는 Runnable 인터페이스를 구현하거나 Thread 클래스를 확장하여 자바 스레드 클래스를 만들 수 있습니다. 그러나 자바 스레드를 시작하려면 먼저 스레드 개체를 만들고 run() 메서드를 스레드로 실행하기 위해 start() 메서드를 호출해야 합니다.

Java에서 스레드 생명주기

아래 다이어그램은 자바에서 스레드 생명주기의 다양한 상태를 보여줍니다. 자바에서 스레드를 만들고 시작할 수 있지만 스레드 상태가 Runnable에서 Running으로 Blocked로 변경되는 방식은 스레드 스케줄러의 OS 구현에 따라 달라지며 자바는 그에 대한 완전한 제어를 가지지 않습니다.

New

새 Thread 개체를 만들 때 new 연산자를 사용하면 스레드 상태가 New Thread입니다. 이 시점에서 스레드는 활성 상태가 아니며 Java 프로그래밍 내부 상태입니다.

Runnable

Thread 개체에서 start() 함수를 호출하면 상태가 Runnable로 변경됩니다. 제어는 스레드 스케줄러에게 실행을 완료하도록 전달됩니다. 이 스레드를 즉시 실행할지 또는 실행 전에 Runnable 스레드 풀에 유지할지는 스레드 스케줄러의 OS 구현에 따라 다릅니다.

Running

스레드가 실행 중일 때 상태가 Running으로 변경됩니다. 스레드 스케줄러는 Runnable 스레드 풀에서 스레드 하나를 선택하고 상태를 Running으로 변경합니다. 그런 다음 CPU가 이 스레드를 실행합니다. 스레드는 시간 분할, run() 메서드의 완료 또는 일부 리소스를 기다리는 것에 따라 상태를 Runnable, Dead 또는 Blocked로 변경할 수 있습니다.

Blocked/Waiting

A thread can be waiting for other thread to finish using thread join or it can be waiting for some resources to available. For example producer consumer problem or waiter notifier implementation or IO resources, then it’s state is changed to Waiting. Once the thread wait state is over, it’s state is changed to Runnable and it’s moved back to runnable thread pool.

Dead

한 번 스레드가 실행을 마치면 해당 스레드의 상태가 Dead로 변경되며, 이는 더 이상 활성 상태가 아닌 것으로 간주됩니다. 위에는 스레드 상태의 다양한 상태가 나와 있습니다. 이러한 상태를 알고 스레드가 상태를 어떻게 변경하는지 알면 좋습니다. 이것으로 자바에서의 스레드 라이프 사이클에 대한 설명이 끝납니다.

Source:
https://www.digitalocean.com/community/tutorials/thread-life-cycle-in-java-thread-states-in-java