본문 바로가기
운영체제 (OS)

쓰레드 (Thread)

by sgyeong 2025. 12. 17.

쓰레드 (Thread)

 

프로세스 내에서 실행되는 흐름의 단위.

보통 하나의 프로그램(프로세스)은 최소 하나 이상의 쓰레드를 가지며, 이것을 메인 쓰레드(Main Thread)라고 한다.

쓰레드가 여러 개라면 이것을 멀티 쓰레드(Multi-Thread)라고 한다.

 

 

프로세스와 쓰레드의 차이점

프로세스(Process): 실행 중인 프로그램 그 자체 (하나의 공장)

쓰레드(Thread): 프로세스 내에서 일하는 일꾼 (공장 안의 노동자)

 

구분 프로세스 (Process) 쓰레드 (Thread)
자원 공유 독립된 메모리 영역을 가짐 (서로 공유 X) 프로세스 내 자원을 공동으로 공유함
영향도 한 프로세스가 죽어도 다른 프로세스에 영향을 주지 않음 한 쓰레드가 예외를 발생시키면 프로세스 전체가 영향을 받음
무게 생성/교체 시 비용이 큼 생성/교체 시 비용이 적음

 

 

 

쓰레드를 만드는 방법

 

1) Thread 클래스를 이용하는 경우

 

① Thread 클래스 상속

② run() 메소드 오버라이딩

 

③ 쓰레드 객체 생성

④ start() 메소드 호출 → 쓰레드 시작

 

 

 

 

2) Runnable 인터페이스를 이용하는 경우

 

① Runnable 인터페이스로 새 클래스 구현

② run() 메소드 오버라이딩

 

 

③ 쓰레드 객체 생성

④ start() 메소드 호출 → 쓰레드 시작

 

 

java에서는 다중 상속이 불가능하다. 그렇기 때문에 이미 다른 클래스를 상속받고 있으면 Thread 클래스를 직접 상속받는 방식이 불가능하다. 

 

Runnuble 인터페이스로 구현하는 방식은 동일한 Runnuble 객체를 여러 스레드에서 재사용 가능하기 때문에 객체지향 설계에 유리하다. 그렇기 때문에 Runnuble 인터페이스로 구현하는 방식이 많이 사용된다.

 

 

 

쓰레드의 6가지 상태

 

1) NEW (객체 생성)

쓰레드 객체가 생성되었지만 아직 start() 메서드가 호출되지 않은 상태

 

2) RUNNABLE (실행 대기 및 실행)

start()가 호출되어 실행될 준비가 되었거나 현재 실행중인 상태

 

3) WAITING (무한 대기) 

다른 쓰레드가 특정 작업을 수행하기를 기다리며 시간 제한 없이 대기중인 상태

 

4) TIMED_WAITING (시간 제한 대기)

WAITING과 비슷하지만 지정한 시간 동안만 대기하는 상태

 

5) BLOCKED (차단/일시정지)

쓰레드가 사용하려는 객체의 락(Lock)이 풀리기를 기다리는 상태

 

6) TERMINATED (종료)

쓰레드의 작업이 모두 끝났거나, 예외가 발생하여 종료된 상태

 

 

 

 

 

 

 

참고 

https://devhdong.tistory.com/7

 

[JAVA] 스레드와 멀티태스킹

스레드(Thread) 프로그램 코드를 이동하면서 실행하는 하나의 제어 자바의 멀티태스킹 멀티쓰레딩만 가능 - 자바에 프로세스 개념은 존재하지 않고, 스레드 개념만 존재 스레드는 실행 단위이자

devhdong.tistory.com