쓰레드 구현과 실행
Thread 클래스 상속
class MyThread extends Thread {
@Override
public void run() {
}
}
public class Main {
public static void main() {
MyThread mt = new MyThread();
mt.start();
}
}
Runnable 인터페이스 구현
class MyThread extends Runnable {
@Override
public void run() {
}
}
public class Main {
public static void main() {
MyThread mt = new MyThread();
Thread thread = new Thread(mt);
thread.start();
}
}
쓰레드 실행
thread.start()
를 통해 쓰레드를 시작할 수 있다.
- 하지만 바로 실행되는 것은 아니다. 일단 실행대기 상태에 있다가 자신의 차례가 되어야 실행된다.
start() & run()
run()
run()
은 새로운 쓰레드를 실행시키지 않고 단순히 메서드만 실행시킨다.
start()
main()
에서 쓰레드의 start()
를 호출
start()
는 새로운 쓰레들르 생성, 쓰레드가 작업할 때 호출스택을 생성
- 새로 생성된 호출 스택에
run()
이 호출되어
- 호출스택이 2개이므로 스케줄러가 정한 순서에 의해서 번갈아 가면서 실행
프로그램 종료
- 메인 쓰레드가 종료되었다고 쓰레드가 종료 되는 것이 아니다.
- 실행 중인 사용자 쓰레드가 하나도 없을 때 프로그램은 종료된다.
쓰레드의 우선순위
- 쓰레드의 우선순위는 실행 순서를 결정하는 것이 아니라 할당 되는 실행시간을 결정한다. 우선순위가 높을 수록 할당 되는 시간이 길어진다.
- 우선 순위 설정 :
setPriority(원하는 우선 순위)
- 우선 순위 조회 :
getPriority(\)
- 최대 우선 순위 : 10
- 기본 우선 순위 : 5
- 최소 우선 순위 : 1