Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- The law of Demeter
- 배치
- 사가 패턴
- 스레드
- 디자인 패턴
- Spring Boot Actuator
- Java
- zipkin
- java 정렬
- MSA
- Resilinece4j
- spring batch
- saga pattern
- spring cloud
- 알고리즘
- 스프링 배치
- JPA
- 멀티스레드
- thread
- Parallel Old GC
- Spring Cloud Netfilx Eureka
- 체인 패턴
- 디자인패턴
- TypeScript
- Action Pattern
- 생산자 소비자 패턴
- Transaction Pattern
- 타입스크립트
- 키클락
- Serial GC
Archives
- Today
- Total
PSD( Private-Self-Development )
Thread 와 Runnable 본문
Thread와 Runnable 은 자바 초기(JAVA 5 이전)부터 멀티스레드를 위해 제공되던 기술이다.
Thread
스레드 생성을 위해 Java에서 미리 구현해 둔 클래스
기본 메서드를 제공한다.
- run
- 스레드 실행
- sleep
- 스레드 멈추기
- 자원 할당을 제거하지는 않고, 제어건만 넘겨주므로 데드락 발생 가능성 생김
- interrupt
- interruptedException 발생 시킴
- interrupt가 발생한 스레드는 예외를 catch 하여 다른 작업을 진행 가능
- join
- 다른 스레드의 작업이 끝날 때까지 기다리게 함
- 스레드 간 순서 제어에 사용
Thread 장단점
장점
- 기본 메서드를 제공하기 때문에 이를 오버라이딩 하여 스레드를 상세하게 제어할 수 있다.
단점
- 기본 메서드를 포함하고 있기에 Runnable 보다 무겁다.
- 별도의 클래스를 생성해야 한다.
Thread 구현
Thread 클래스를 상속받는 클래스를 만들고 run 메서드를 오버라이딩 해야 한다.
class MyThread extends Thread {
@Override
public void run() {
}
}
static void main() {
Thread thread = new MyThread();
thread.start(); // run이 아닌 start를 호출
}
run 이 아닌 start를 호출하는 이유
run을 호출하는 것은 메인 스레드에서 객체의 메서드를 실행하는 것뿐이다.
start를 호출해야 별도의 스레드에 할당된다.
start 를 호출할 경우, 아래의 과정을 가진다.
- 스레드가 실행 가능한지 검사
- 스레드는 New, Runnable, Waiting, Timed Waiting, Terminated 5가지 타입을 가진다.
- 스레드를 스레드 그룹( 관련 있는 스레드의 모임 )에 추가
- 스레드를 jvm이 실행
Runnable
1개의 메서드 만을 갖는 함수형 인터페이스
때문에, 람다로도 사용 가능하다.
Thread 클래스는 이 Runnable 인터페이스를 구현하고 있다.
Runnable 장단점
장점
- 별도의 클래스가 필요하지 않다.
- Thread 클래스 대비 가볍다.
Runnable 구현
static void main() {
Runnable runnable = () -> {
try{
Thread.sleep(100);
} catch(Exception e){
}
};
Thread thread = new Thread(runnable);
thread.start();
}
Thread와 Runnable의 단점 및 한계
- 지나치게 저수준의 API(스레드의 생성)에 의존함
- 값의 반환이 불가능
- 매번 쓰레드 생성과 종료하는 오버헤드가 발생
- 스레드들의 관리가 어려움
참조
'Backend > Thread' 카테고리의 다른 글
생산자 소비자 패턴 (2) | 2024.08.28 |
---|---|
BlockingQueue 와 DelayQueue (0) | 2024.08.26 |
CompletableFuture (0) | 2023.07.12 |
Callable, Future, Executors, Executor, ExecutorService, ScheduledExecutorService (0) | 2023.07.12 |
Thread 란? (0) | 2022.11.15 |