>  기사  >  Java  >  Java 스레드의 라이프사이클 소개(예제 포함)

Java 스레드의 라이프사이클 소개(예제 포함)

不言
不言앞으로
2019-04-13 10:01:096117검색

이 기사는 Java 스레드의 라이프사이클을 소개합니다(예제 포함). 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

1. 스레드의 수명 주기

스레드와 마찬가지로 프로세스에도 특정 수명 주기가 있습니다. 스레드의 수명 주기에는 생성 상태, 준비 상태, 차단 상태 및 종료 상태가 있습니다.

1. 생성 상태

1) 스레드 개체를 인스턴스화하기 위해 new를 사용하는 것을 의미하지만 스레드 개체는 아직 스레드를 시작하기 위해 start() 메서드를 사용하지 않았습니다. 이 단계에서는 개체의 인스턴스 변수만 있습니다. 메모리 힙에 메모리 공간이 할당되지만 스레드는 CPU 사용 권한을 확보하는 데 참여할 수 없습니다.

2) 스레드 개체가 생성된 후 run() 메서드가 아닌 start() 메서드를 사용합니다. 스레드 개체를 시작하는 데 사용됩니다.

2. 준비 상태

1) 스레드 객체가 start() 메서드를 사용하는 시점부터 run() 메서드 실행이 완료되는 단계를 말합니다. 스레드가 준비 단계에 들어가면 Java 가상 머신이 호출 스택을 생성합니다.

2) 특정 시간 단위(타임 슬라이스) 내에서 CPU는 하나의 스레드만 실행할 수 있습니다.

3) 준비 상태의 모든 스레드는 활성 상태로 간주됩니다. isAlive() 메서드를 사용하여 스레드가 준비 상태에 있는지 테스트하고 activeCount()를 사용하여 개수를 쿼리할 수 있습니다. 현재 스레드가 위치한 스레드 풀의 활성 스레드

4) 준비 상태 스레드가 실행 중인 상태가 아닙니다. 과거에는 많은 컴퓨터가 단일 프로세서로 실행하는 것이 불가능했습니다. 동시에 준비 상태입니다. Java는 일부 스케줄링 알고리즘을 사용하여 이러한 스레드가 프로세서 사용을 공유하는지 확인합니다(예: 타임 슬라이스 회전 알고리즘, 독점 알고리즘 등).

3. 차단 상태:

1) 차단 상태에는 4가지 상태(휴면 상태, 차단 상태, 일시 중지 상태, 대기 상태)가 있습니다. 일반적으로 차단 상태와 준비 상태는 서로 전환될 수 있습니다.

2) sleep() 메서드는 스레드를 절전 상태로 전환하여 다른 프로세스가 실행될 기회를 얻을 수 있도록 허용하지만 InterruptedExecption 예외는 절전 메서드를 사용하여 포착해야 합니다.

3) 스레드를 일시 중단하려면 일시 중지 메서드를 사용합니다(이후에는 사용되지 않음). jdk1.2), wait 사용 방법은 스레드를 대기 상태로 설정하고(나중에 이에 대한 에세이가 나올 예정임) I/O 인터럽트를 사용하여 스레드를 차단 상태로 설정하는 것입니다.

4. 종료 상태:

1) 스레드가 실행 메소드 실행을 마치면 스레드는 종료 상태에 들어가고 Java 가상 머신은 종료 상태의 스레드 객체가 차지한 시스템 리소스를 파괴합니다. 스레드가 포착되지 않은 예외에 직면하면 스레드가 종료되고 종료 상태에 들어갑니다. stop 메소드를 호출하면 스레드가 종료 상태에 들어갈 수도 있지만 교착 상태가 발생하기 쉬우므로 더 이상 사용되지 않습니다.

5. 스레드 수명주기는 다음과 같습니다.

2. 다음은 sleep 메서드가 스레드를 절전 모드로 전환하는 경우입니다.

/**
 * @author: PrincessHug
 * @date: 2019/4/12, 9:20
 * @Blog: https://www.cnblogs.com/HelloBigTable/
 */
public class SleepDemo  implements Runnable{
    @Override
    public void run() {
        long l;
        for (int i=1;i<6;i++){
            l = System.currentTimeMillis();
            try {
                Thread.currentThread().sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            l = (System.currentTimeMillis() - l);
            System.out.println(Thread.currentThread().getName() + "线程执行了" + i + "次,耗时" + l + "毫秒。");
        }
    }
}
public class SleepDriver {
    public static void main(String[] args) {
        SleepDemo sd = new SleepDemo();
        for (int i=0;i<50;i++){
            new Thread(sd,i + "#").start();
        }
    }
}

다음은 일부 실행 스크린샷입니다. 결과:

더 많은 스레드가 동시에 시작되면 각 스레드가 더 오래 걸리는 것을 볼 수 있습니다.

위 내용은 Java 스레드의 라이프사이클 소개(예제 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제