본문 바로가기
Java

[Java] 스레드의 생성과 생명주기

by 희디비 2024. 11. 10.

스레드 생성

스레드 생성 방법은 두 가지 입니다.

  • Thread 상속 받기
public class HelloThread extends Thread {

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + ": run()");
    }
}

 

스레드를 직접 상속 받으면 문제가 있습니다.

  1. 자바는 다중 상속을 지원 하지 않습니다. 스레드를 상속 받을 경우 다른 상속을 받을 수 없습니다.
  2. 스레드의 불필요한 부분을 상속 받는 문제가 있습니다. 스레드의 작업만 재정의 하기 때문에 상속을 받을 필요가 없습니다.

스레드 상속 보다는 Runnable 인터페이스를 이용한 스레드 생성을 주로 합니다.

 

  •  Runnable 인터페이스
public class HelloRunnable implements Runnable{
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + ": run()");
    }
}

HelloRunnable runnable = new HelloRunnable();
Thread thread = new Thread(runnable);

 

한번 사용될 작업의 경우 익명 클래스, 람다를 통해 간단히 Thread를 생성할 수 있습니다.

new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName() + ": run()");
            }
        });
        
new Thread(() -> System.out.println(Thread.currentThread().getName() + ": run()"));

 

스레드 시작

thread.run() : 현재 스레드에서 run() 메소드를 실행 합니다. ( 스레드 시작 시 사용x )

thread.start() : 새로운 스레드를 만들고 그 스레드에서 run()을 실행 합니다.

 

 

 

여기서 중요한 점은 main 스레드에서 thread-0를 만들고 thread.start()를 했을때

run()을 실행 하는 주체가 main 스레드가 아니라는 것 입니다. ( run 메소드는 thread - 0 실행 하는 것 입니다. )

 

 

 

다른 인스턴스에서도 동일한 데이터가 있을 수 있기 때문에 메소드를 시작 할때

인스턴스의 참조를 기억 하고 있습니다. 그레서 호출 하려는 인스턴스의 정확한 값을 찾을 수 있습니다.

 

데몬 스레드

 

데몬 스레드는 백그라운드의 보조 작업을 하는 스레드 입니다.

자바에서 종료 조건은 사용자 스레드가 모두 종료 되는 것인데 데몬 스레드는 사용자 스레드에 포함 되지 않습니다.

 

 

자바 스레드의 생명 주기

 

 

New : 스레드 생성된 상태 ( new Thread )

Runnable : 스레드가 실행 중 혹은 실행 될 준비가 된 상태 ( thread.start )

스케줄링 큐에 들어가 있는 thread2 실행 중인 thread1 둘 다 runnable 상태 

Terminated : 스레드 종료 상태 

Waiting : 다른 스레드의 작업을 기다리는 상태

blocked : 동기화 락을 기다리는 상태

Timed_waiting : 일정 시간 동안 대기 중인 상태

 

위 글을 김영한 선생님 실전 자바 고급 1편을 보고 요약 한 것입니다.

자세한 내용이 궁금 하시다면 강의를 추천 드려요!

 

 

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성 강의 | 김영한 - 인프런

김영한 | 멀티스레드와 동시성을 기초부터 실무 레벨까지 깊이있게 학습합니다., 국내 개발 분야 누적 수강생 1위, 제대로 만든 김영한의 실전 자바[사진][임베딩 영상]단순히 자바 문법을 안다?

www.inflearn.com

 

'Java' 카테고리의 다른 글

[Java] LockSupprot, ReentrantLock  (1) 2024.11.19
[Java] 메모리 가시성, 임계 영역  (4) 2024.11.15
[Java] Join, Interrupt, Yield  (0) 2024.11.12
[Java] 프로세스와 스레드  (4) 2024.11.09
[자바의 정석] 람다  (1) 2023.10.30