2011. 11. 3. 15:40
java thread 내생각 JAVA이야기2011. 11. 3. 15:40
java thread 의 interrupted
자바의 interrupt를 스레드에게 보내는 신호로 해석하면 쉽다. OS랑 약간다름.
OS는 interrupt 걸리면, 해당 프로세스를 종료하고, interrupt 핸들러를 수행하고 다시 돌아온다.
2가지로 나뉜다.
1.실행될 때
- 실행될 때 인터럽트 신호가 걸리면 이를 무시한다.
- 이를 확인하려면? isInterrupted()메소드를 사용한다.
2. 대기큐에 있을 때
- 대기큐에 있을 때 인터럽트 신호가 걸리면 실행큐로 들어간다.
- 실행이 될 땐, InterruptException catch 블록으로 들어가 수행하게 된다.
이 때, isInterrupted의 상태는 false이다. 왜냐하면 이미 신호가 지나가고 난 후에 메소드를 호출했기 때문이다.
main(){
thread.join();
}
main 스레드는 thread와 같은 생명 주기를 가진다. 따라서 thread가 종료될 때까지 기다린다.
yield()
자기를 대기상태로 전이 시킨다. 만약 실행될 프로세스가 없으면 자신을 실행시킨다.
자바의 interrupt를 스레드에게 보내는 신호로 해석하면 쉽다. OS랑 약간다름.
OS는 interrupt 걸리면, 해당 프로세스를 종료하고, interrupt 핸들러를 수행하고 다시 돌아온다.
2가지로 나뉜다.
1.실행될 때
- 실행될 때 인터럽트 신호가 걸리면 이를 무시한다.
- 이를 확인하려면? isInterrupted()메소드를 사용한다.
2. 대기큐에 있을 때
- 대기큐에 있을 때 인터럽트 신호가 걸리면 실행큐로 들어간다.
- 실행이 될 땐, InterruptException catch 블록으로 들어가 수행하게 된다.
이 때, isInterrupted의 상태는 false이다. 왜냐하면 이미 신호가 지나가고 난 후에 메소드를 호출했기 때문이다.
main(){
thread.join();
}
main 스레드는 thread와 같은 생명 주기를 가진다. 따라서 thread가 종료될 때까지 기다린다.
yield()
자기를 대기상태로 전이 시킨다. 만약 실행될 프로세스가 없으면 자신을 실행시킨다.
'JAVA이야기' 카테고리의 다른 글
동기화 Collection클래스 (0) | 2011.11.07 |
---|---|
Java Pattern Group 사용하기 (0) | 2011.11.05 |
넌블로킹 알고리즘 (0) | 2011.09.27 |
단일 연산 변수 클래스 (0) | 2011.09.27 |
AbstractQueuedSynchronizer (0) | 2011.09.26 |