
자바의 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(); // 실행
'Language > JAVA' 카테고리의 다른 글
[JAVA] Thread(스레드)를 활용한 간단한 Counter(카운터) 프로그램 만들기 with IntelliJ (0) | 2024.04.06 |
---|---|
[JAVA] Memory Structure(메모리 구조)와 Wrapper Class (24) | 2024.04.04 |
[JAVA] 간단한 console 프로젝트 정수 계산기 프로그램 만들기 with IntelliJ (13) | 2024.04.03 |
[JAVA] method Overloading vs. Overriding(메소드 오버로딩 vs. 오버라이딩) (1) | 2024.04.02 |
[JAVA] Class Inheritance 클래스 상속 (27) | 2024.04.01 |