>  기사  >  Java  >  Java 스레드의 5가지 상태와 상태 전환 규칙에 대한 자세한 설명

Java 스레드의 5가지 상태와 상태 전환 규칙에 대한 자세한 설명

王林
王林원래의
2024-02-19 17:03:06553검색

Java 스레드의 5가지 상태와 상태 전환 규칙에 대한 자세한 설명

Java 스레드의 5가지 상태 및 해당 변환 규칙에 대한 심층적인 이해

1. 스레드의 5가지 상태 소개
Java에서 스레드의 수명 주기는 다음을 포함하여 5가지 상태로 나눌 수 있습니다. 새로운 상태(NEW), 준비 상태(RUNNABLE), 실행 중인 상태(RUNNING), 차단된 상태(BLOCKED) 및 종료된 상태(TERMINATED).

  1. 새 상태(NEW): 스레드 개체가 생성되면 새 상태가 됩니다. 이 시점에서 스레드 객체는 작업을 수행하기에 충분한 리소스를 할당했지만 아직 run() 메서드 실행을 시작하지 않았습니다.
  2. 준비 상태(RUNNABLE): 스레드가 start() 메서드를 호출하면 스레드는 준비 상태로 들어갑니다. 준비 상태의 스레드는 실행 조건이 있으며 CPU가 코드 실행을 위한 시간 세그먼트를 할당하기를 기다리고 있습니다.
  3. 실행 상태(RUNNING): 준비 상태의 스레드가 CPU 시간 세그먼트를 획득하면 실행 상태로 들어가 run() 메서드의 코드 실행을 시작합니다. 스레드는 스스로 종료되거나 다른 스레드에 의해 중단될 때까지 계속 실행됩니다.
  4. 차단된 상태(BLOCKED): 다음 상황에서 스레드는 차단된 상태로 들어갑니다.

    • sleep() 메서드가 호출되고 CPU 리소스가 적극적으로 포기됩니다.
    • 잠긴 리소스 등 리소스의 해제를 기다리고 있습니다.
    • 스레드는 Join() 메서드에서 다른 스레드가 완료될 때까지 기다립니다.
  5. 종료 상태(TERMINATED): 스레드가 종료된 후 종료된 상태로 들어갑니다. 스레드가 run() 메서드의 코드 실행을 완료하거나 예외 또는 기타 이유로 인해 스레드가 종료되면 스레드는 종료됨 상태로 들어갑니다.

2. 상태 간 변환 규칙
스레드 상태 간에는 특정 변환 규칙이 있습니다. 아래에서는 각 상태 간의 변환 규칙을 각각 소개합니다.

  1. 새 상태(NEW)가 준비 상태(RUNNABLE)로 변환됩니다. 스레드 개체가 생성되고 start() 메서드가 호출되면 스레드가 새 상태에서 준비 상태로 변환됩니다.
  2. 준비 상태(RUNNABLE)를 실행 상태(RUNNING)로 변환: 스레드가 CPU 리소스를 획득하면 준비 상태에서 실행 상태로 변경됩니다.
  3. 실행 상태(RUNNING)를 차단 상태(BLOCKED)로 전환: 실행 중에 리소스 해제를 기다리거나 CPU 리소스를 적극적으로 해제하여 스레드가 차단 상태에 들어갈 수 있습니다.
  4. 차단 상태(BLOCKED)를 준비 상태(RUNNABLE)로 전환: 스레드가 기다리고 있는 리소스가 해제되거나 대기 시간이 만료되면 차단 상태에서 준비 상태로 전환됩니다.
  5. 실행 상태(RUNNING)를 종료 상태(TERMINATED)로 전환: 스레드의 run() 메서드가 완료되거나 예외로 인해 스레드가 종료되면 스레드는 실행 상태에서 종료 상태로 전환됩니다.

3. 코드 예제

다음은 스레드 상태 간의 변환 규칙을 보여주는 간단한 코드 예제입니다.

class MyThread extends Thread {
    
    @Override
    public void run() {
        try {
            Thread.sleep(1000);
            System.out.println("线程执行完毕");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

public class ThreadStateDemo {

    public static void main(String[] args) {
        MyThread thread = new MyThread();
        System.out.println("线程创建后状态:" + thread.getState());

        thread.start();
        System.out.println("调用start()方法后状态:" + thread.getState());

        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("等待500ms后状态:" + thread.getState());

        try {
            thread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("调用join()方法后状态:" + thread.getState());
    }
}

위 코드를 실행하면 다음과 같은 출력을 볼 수 있습니다.

线程创建后状态:NEW
调用start()方法后状态:RUNNABLE
等待500ms后状态:RUNNABLE
线程执行完毕
调用join()方法后状态:TERMINATED

위 코드는 상속을 생성합니다. Thread 클래스의 Thread 객체 MyThread입니다. 메인 스레드에서는 여러 단계에서 스레드 개체의 상태 변화를 관찰할 수 있습니다.

Java 스레드의 5가지 상태와 해당 변환 규칙에 대한 심층적인 이해를 통해 멀티스레딩의 원리를 더 잘 이해하고 동시 프로그래밍 능력을 더욱 향상시킬 수 있습니다. 동시에 실제 개발 과정에서는 스레드 상태를 판단하고 처리하는 것도 매우 중요합니다. 이 글이 모든 사람에게 도움이 되기를 바랍니다.

위 내용은 Java 스레드의 5가지 상태와 상태 전환 규칙에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.