스레드 정보
- 스레드 이름을 출력시키면 [#id,이름,우선순위,그룹]에 대한 정보가 나온다.
스레드 id
- 스레드 고유의 id. 이름과 달리 겹칠 수 없다.
- threadId() 혹은 getId()로 얻을 수 있다.
스레드 이름
- getName()으로 이름을 반환받고, 이건 겹칠 수 있다.
- 스레드를 생성할 때
new Thread(Runable 이름, 스레드 이름) 형식으로 만들 수 있다. 아니면 setName()도 가능하다.
스레드 우선순위
- 스레드 어떤 걸 먼저 실행할 지 결정한다. 1(매우 낮음) ~ 10(매우 높음) 숫자로 설정하는데 10이라고 해서 무조건 먼저 실행되는 건 아니다. 먼저 시행될 확률이 높을 뿐. 기본값은 5이다.
- getPriority()로 우선순위를 반환할 수 있다. setPriority()로 우선 순위를 바꿀 수 있다.
-우선 순위는 자주 사용하지 않는다.
스레드 그룹
- 스레드에도 그룹으로 묶어서 하는 게 있다. 그룹으로 묶어 단체로 실행시키거나 정지시킬 수 있다.
- getThreadGroup()으로 그룹값을 반환받을 수 있다. 주로 부모 스레드하고 같이 묶이는데 부모 스레드는 스레드를 생성시켜준 스레드를 말한다.
- 이건 알아두기만 하면 좋다.
스레드 상태
- 말 그대로 스레드의 상태다. 실행되고 있는지 대기하고 있는지 등의 상태다.
- getState()로 상태값을 받을 수 있다.
스레드 상태 종류
NEW
RUNNABLE
- 실행 중이거나 실행 가능 상태를 말한다. start()로 스레드를 실행시키면 Runnable 상태로 전이된다.
- 두 가지 상태가 해당하는 이유는 스레드가 여러 개일 경우 스레드 한 개는 실행 중인 반면 스케줄러에 있는 스레드도 있기 때문이다. 자신의 차례까 올 때까지 기다리고 있는 거긴 하지만 너무 빠르므로 따로 구분하지 않고 그냥 실행 가능 상태로 통틀어 말한다.
WAITING
- 실행하기 위해 기다리고 있는 상태다.
- 스케줄러에서 대기하고 있는 거 말고 데이터를 받아오거나 그럴 때 올 떄 까지 기다리는 상태다.
- wait(), join()이 호출됐을 때 이 상태가 된다.
- 다른 스레드가 notify(), notifyAll()를 호출하거나 join() 작업이 완료될 때까지 기다린다.
BLOCKED
- 동기화 락을 받을 때까지 기다리는 상태다.
- 동기화일 떄는 하나의 스레드만 작동하므로 락을 받을 떄까지 기다려야 한다.
TIMED WAITING
- 특정 시간 동안 기다리는 걸 말한다.
- sleep(mills), wait(long timeout), join(long mils)일 때 이 상태가 된다.
- 시간이 끝날 때 꺠워지는데 아니면 다른 스레드에 의해 강제로 깨워질 수도 있다.