티스토리 뷰
Thread를 알기 전에 프로세스(Process)부터 알아보자.
프로세스(Process)란 실행 중인 프로그램(program)이다.
프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)를 할당받아 프로세스가 된다.
프로세스는 프로그램을 수행하는 데 필요한 데이터와 메모리 등의 자원 그리고 Thread로 구성되어 있다.
프로세스의 자원을 이용해서 실제로 작업을 수행하는 것이 바로 Thread이다.
모든 프로세스에는 최소한 하나 이상의 Thread가 존재하며,
둘 이상의 Thread를 가진 프로세스를 멀티쓰레드 프로세스(multi-threaded process) 라고 한다.
상태
NEW
- Thread가 생성되고 아직 start()가 호출되지 않은 상태
RUNNABLE
- 실행 중 또는 실행 가능한 상태
BLOCKED
- 동기화블럭에 의해서 일시정지된 상태(lock이 풀릴 때까지 기다리는 상태)
WAITING, TIMED_WAITING
- Thread의 작업이 종료되지는 않았지만 실행가능하지 않은(unrunnable) 일시정지 상태
TIMED_WAITING은 일시정지 시간이 지정된 경우를 의미
TERMINATED
- Thread의 작업이 종료된 상태
Thread를 구현하는 방법
Thread 클래스를 상속받는 방법
- 다른 클래스를 상속 받을 수 없다.
class Main extends Thread {
public void run() { //Thread 클래스의 run() 오버라이딩
//do somthing
System.out.println(getName()); //조상인 Thread의 getName() 호출
}
public static void main(String[] args) {
Main main = new Main();
main.start();
}
}
Runnable 인터페이스를 구현하는 방법
- Runnable 인터페이스를 구현한 클래스의 인스턴스를 생성 후,
해당 인스턴스를 Thread클래스의 생성자의 매개변수로 제공해야한다
class Main implements Runnable {
@Override
public void run() { //Runnable인터페이스의 run()을 구현
//do somthing
System.out.println(Thread.currentThread().getName());
}
public static void main(String[] args) {
Runnable main = new Main();
Thread thread = new Thread(main);
thread.start();
//익명 객체 사용 방법
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
});
thread.start();
}
}
위 예제에서 Thread 인스턴스를 생성한다고 Thread 가 실행되는 것이 아니다.
start() 함수를 호출해야 Thread 가 실행된다.
여기서, start() 함수를 호출하였다고 바로 실행되는 것이 아니라 일단 실행대기 상태에 있다가 자신의 차례가 되어야 실행된다.
물론 실행대기중인 Thread가 하나도 없으면 곧바로 실행 상태가 된다.
Thread의 실행 순서는 OS의 스케줄러가 작성한 스케줄에 의해 결정된다.
우선순위
* Thread의 최대 우선순위보다 크거나 최소 우선순위보다 작으면 IllegalArgumentException 발생한다!
//Thread 우선순위 상수
public static final int MAX_PRIORITY = 10 //최대 우선순위
public static final int MIN_PRIORITY = 1 //최소 우선순위
public static final int NORM_PRIORITY = 5 //보통 우선순위
//우선순위 정하는 함수
public final void setPriority(int newPriority)
//우선순위 반환하는 함수
public final int getPriority()
참고
Java의 정석
'Language > Java' 카테고리의 다른 글
[Java] Collection Framework (0) | 2022.11.27 |
---|---|
[Java] Exception (0) | 2022.11.10 |
[Java] Stack & Queue (0) | 2022.06.27 |
[Java] StringBuffer & StringBuilder (0) | 2022.06.22 |
[Java] String (0) | 2022.06.21 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Security
- Hash
- Load Balancer
- Caching
- java
- 고정 세션
- 인스턴스변수
- 추상클래스
- 인터페이스
- Spring
- Sticky Session
- Red-Black Tree
- 정적변수
- @conditional
- fail-fast
- fail-safe
- JPA
- 로드 밸런서
- nosql
- HashSet
- syncronized
- 티스토리챌린지
- spring boot
- 다중화
- 자동구성
- 오블완
- nginx
- HashMap
- object
- AutoConfiguration
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함