Java

Java / 스레드 생성과 실행

Dear-J 2025. 5. 12. 21:23

 스레드 생성 - Thread 클래스 상속

스레드 객체를 생성하고 start()를 호출해야 스택 공간을 할당 받고 스레드 작동

>> 이름을 주지 않으면 Thread-0처럼 임의의 이름 부여

>> Thread-0는 run() 메서드의 스택 프레임을 스택에 올리면서 메서드 시작

 

스레드간 실행 순서는 보장 x

 

start() vs run()

run() 메서드를 직접 호출하면?

별도의 스레드가 run()을 실행하는 것이 아닌 main 스레드가 run() 호출

>> 별도의 스레드에서 재정의한 run() 메서드를 실행하려면 반드시 start() 호출

 

사용자 스레드

프로그램의 주요 작업 수행

작업이 완료될 때까지 실행

 

모든 user 스레드 종료

>> JVM 종료

 

데몬 스레드

백그라운드에서 보조적 작업 수행

 

모든 user 스레드 종료

>> 데몬 스레드 자동 종료

 

setDaemon(true) : 데몬 스레드로 설정

>> false가 기본 값 (user 스레드가 기본)

 

스레드 생성 - Runnable

장점

>> 상속의 자유로움 : 다른 클래스를 상속받아도 문제 없이 구현

>> 코드의 분리 : 스레드와 실행할 작업을 분리해서 코드의 가독성 높힘

>> 여러 스레드가 동일한 Runnable 객체 공유 가능

 

단점

>> 코드의 복잡도

>> Runnable 객체를 생성하고 Thread에 전달하는 과정 추가

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

출처 : 김영한, 김영한의 실전 자바 - 고급 1편