본문 바로가기

언어/Java

스레드 상태

스레드 객체를 생성(NEW) 하고 start() 메소드를 호출하면 실행X

실행대기상태(RUNNABLE)가 된다. 실행을 기다리는 상태.

실행 대기하는 스레드는 CPU 스케쥴링에 따라 CPU를 점유하고 run() 메소드를 실행, 이때를 실행(RUNNING) 상태

실행 스레드는 run() 메소드를 모두 실행하기 전에 스케줄링에 의해 다시 실행 대기 상태로 돌아갈 수 있다. 그리고 다른 스레드가 실행 상태가 된다.

더 이상 실행할 코드가 없으면 스레드의 실행은 멈추게 된다. 이 상태를 종료상태(TERMINATED) = DEAD 상태

 

Thread 클래스의 메소드

join() = 한 스레드가 끝날 때까지 일시정지

wait() 동기화 블록 내에서 스레드를 일시 정지 상태

 

main스레드가 one스레드가 끝날때까지 기다림

 

main 스레드부터 하면 올바른 sum값 안나옴
그래서 join을 사용하면 one스레드의 정확한 결과값
특정 스레드만 기다리도록, 다른건 다 돌아감

※ 다른 스레드에게 실행 양보

yield()를 호출한 스레드는 실행 대기 상태로 돌아가고, 다른 스레드가 실행 상태가 된다.

일시정지가 아니라 대기상태로. 다시 runnable 상태로

public void run() {
	while(true) {
    	if(work) {
        	System.out.println("ThreadA 작업 내용");
        } else {
        	Thread.yield();
        }
    }
}

 

'언어 > Java' 카테고리의 다른 글

스레드 안전 종료  (0) 2023.08.16
스레드 동기화  (0) 2023.08.16
스레드 이름 부여하기  (0) 2023.08.16
Thread pop, push  (0) 2023.08.16
ThreadSleep  (0) 2023.08.16