스레드 생성
스레드 생성 방법은 두 가지 입니다.
- Thread 상속 받기
public class HelloThread extends Thread {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + ": run()");
}
}
스레드를 직접 상속 받으면 문제가 있습니다.
- 자바는 다중 상속을 지원 하지 않습니다. 스레드를 상속 받을 경우 다른 상속을 받을 수 없습니다.
- 스레드의 불필요한 부분을 상속 받는 문제가 있습니다. 스레드의 작업만 재정의 하기 때문에 상속을 받을 필요가 없습니다.
스레드 상속 보다는 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 |