본문 바로가기

Language/JAVA

[JAVA] Thread(스레드)와 State(상태)

JAVA Thread 스레드 생성, State 상태 및 구현

 

자바의 Thread(스레드)에 대해 알아봅니다.

 


 

Thread 스레드

프로그래밍 언어로 작성된 프로그램을 실행하는 것을 프로세스라고 하는데요.

이런 프로세스들은 보통 하나의 처리 경로 (왼쪽 > 오른쪽, 위 > 아래)에 따라 실행됩니다.

하나의 프로세스에서 여러 job을 한 번에 또는 동시에 실행하고 싶은 경우 스레드를 사용합니다.

 

A thread is a thread of execution in a program.
JVM allows an application to have multiple thread of execution running concurrently.
[출처] https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html

 

자바 프로그램에서 thread를 사용하여 하나의 프로세스에서 여러 job을 병렬적으로 처리할 수 있습니다.

또한, CPU 등의 자원을 하나의 프로그램 또는 하나의 메소드가 독점하는 것을 방지할 수 있습니다.

 

모든 스레드는 우선순위를 갖고 있는데요.

우선순위가 높은 스레드는 나중에 생성되었다 하더라도 낮은 우선순위보다 먼저 실행됩니다.


Thread 스레드 구현하기

방법1. Thread Class 상속받기

기본 제공되는 Thread Class를 상속받는 자식 클래스를 작성하여 생성합니다.

Thread Class의 run 메소드를 반드시 override 해야 합니다.

public class MyThread extends Thread {
	@Override
    public void run() {
    }
}

 

방법2. Runnable Interface 구현하기

Thread로 구현하려는 클래스가 이미 다른 클래스를 상속받았다면 Runnable Interface를 구현함으로써 생성할 수 있습니다.

마찬가지로 반드시 run 메소드를 override 합니다.

class MyRunnable implements Runnable {
    @Override
    public void run() {
    }
}

Thread State 스레드 상태

NEW

아직 시작되지 않은 상태

RUNNABLE

실행 가능한 상태

TIMED_WAITING

특정 시간동안 대기 중인 상태

WAITING

대기 중인 상태

BLOCKED

wait 상태였던 스레드가 notify()로 wait 상태에서 벗어났지만 Runnable 상태가 아닌 상태

  • 이전에 실행되던 스레드가 종료되지 않거나
  • notifyAll()로 다른 스레드가 먼저 실행된 경우

TERMINATED

종료된 상태


Thread State Control Method 스레드 상태 제어 메소드

sleep

파라미터로 전달된 특정 시간만큼 일시정지

wait

notify() 또는 notifyAll() 호출까지 기다리는 상태

파라미터 전달된 경우 그 시간 동안만 기다립니다.

join

스레드 종료까지 기다리는 시간

0이면 무제한으로 기다립니다.

notify

대기 중인 스레드 중 랜덤으로 한 개의 스레드를 깨웁니다.

notifyAll

wait 메소드로 대기 중이던 스레드 전체를 깨웁니다.


Thread 스레드 실행하기

Thread Class 또는 Runnable Interface를 구현한 클래스의 인스턴스를 생성하여 start 메소드를 호출하면,

Overriding 한 run() 메소드가 실행되며 스레드가 시작됩니다.

MyThread my = new MyThread();
my.start();	// 실행

 

728x90