Java 스레드의 수명 주기는 대략 5가지 상태로 나눌 수 있습니다.
1. 새로운 상태(New): 새로운 스레드 객체가 생성됩니다.
2. 준비 상태(Runnable): 스레드 객체가 생성된 후 다른 스레드가 해당 객체의 start() 메서드를 호출합니다. 이 상태의 스레드는 실행 가능 스레드 풀에 위치하여 실행 가능 상태가 되어 CPU 사용 권한을 얻기를 기다리고 있습니다.
3. 실행 상태(Running): 준비 상태의 스레드가 CPU를 획득하고 프로그램 코드를 실행합니다.
4. 차단된 상태(Blocked): 차단된 상태는 스레드가 어떤 이유로 CPU 사용 권한을 포기하고 일시적으로 실행을 중지하는 것을 의미합니다. 스레드가 준비 상태에 들어갈 때까지 실행 상태로 이동할 기회가 있습니다. 세 가지 차단 상황이 있습니다.
(1) 차단 대기: 실행 중인 스레드가 wait() 메서드를 실행하고 JVM이 해당 스레드를 대기 풀에 넣습니다.
(2) 동기화 차단: 실행 중인 스레드가 객체의 동기화 잠금을 획득할 때 다른 스레드가 동기화 잠금을 점유하고 있으면 JVM은 해당 스레드를 잠금 풀에 넣습니다.
(3) 기타 차단: 실행 중인 스레드가 sleep() 또는 Join() 메서드를 실행하거나 I/O 요청을 발행하면 JVM은 스레드를 차단 상태로 전환합니다. sleep() 상태가 시간 초과되거나, Join()이 스레드가 종료될 때까지 기다리거나 시간 초과되거나, I/O 처리가 완료되면 스레드는 준비 상태로 다시 들어갑니다.
5. 데드 상태(Dead): 스레드가 예외로 인해 실행을 완료했거나 run() 메서드를 종료했으며 스레드의 수명 주기가 종료되었습니다.
다음 예에서는 스레드 상태를 가져오는 방법을 보여줍니다.
/* author by w3cschool.cc Main.java */class MyThread extends Thread{ boolean waiting= true; boolean ready= false; MyThread() { } public void run() { String thrdName = Thread.currentThread().getName(); System.out.println(thrdName + " 启动"); while(waiting) System.out.println("等待:"+waiting); System.out.println("等待..."); startWait(); try { Thread.sleep(1000); } catch(Exception exc) { System.out.println(thrdName + " 中断。"); } System.out.println(thrdName + " 结束。"); } synchronized void startWait() { try { while(!ready) wait(); } catch(InterruptedException exc) { System.out.println("wait() 中断。"); } } synchronized void notice() { ready = true; notify(); }}public class Main { public static void main(String args[]) throws Exception{ MyThread thrd = new MyThread(); thrd.setName("MyThread #1"); showThreadStatus(thrd); thrd.start(); Thread.sleep(50); showThreadStatus(thrd); thrd.waiting = false; Thread.sleep(50); showThreadStatus(thrd); thrd.notice(); Thread.sleep(50); showThreadStatus(thrd); while(thrd.isAlive()) System.out.println("alive"); showThreadStatus(thrd); } static void showThreadStatus(Thread thrd) { System.out.println(thrd.getName()+" 存活:" +thrd.isAlive()+" 状态:" + thrd.getState() ); }}
위 코드를 실행한 결과는 다음과 같습니다.
……alive alive aliveMyThread #1 结束。alive alive alive alive alive alive aliveMyThread #1 存活:false 状态:TERMINATED
위 내용은 Java 예시입니다. - 스레드 상태 내용 가져오기 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!