
데몬쓰레드와 사용자 쓰레드
사용자 쓰레드
-보이는 곳(foregorund) 에서 실행되는 높은 우선순위를 가진 쓰레드
-대표적인 사용자 쓰레드로는 메인 쓰레드
! JVM은 사용자 쓰레드의 작업이 끝나면 데몬 쓰레드도 자동으로 종료시켜 버린다
쓰레드 우선순위와 쓰레드 그룹
쓰레드 우선순위
-쓰레드 작업의 중요도에 따라서 쓰레드의 우선순위를 부여
-우선순위를 높게 지정하면 더 많은 작업시간을 부여받아 빠르게 처리
우선순위는 최대/최소/보통 순으로 나뉜다.
-기본 값이 보통 우선순위! (JVM에서 설정한 우선순위)
쓰레드 그룹
-모든 쓰레드들은 반드시 하나의 그룹에 포함되야 한다.
-메인 쓰레드는 system 그룹 하위에 있는 main 그룹에 포함된다.
쓰레드 상태와 제어 (1)
| 상태 | Enum(상수) | 설명 |
|---|---|---|
| 객체생성 | NEW | 쓰레드 객체 생성, 아직 start() 메서드 호출 전의 상태 |
| 실행대기 | RUNNABLE | 실행 상태로 언제든지 갈 수 있는 상태 |
| 일시정지 | WAITING | 다른 쓰레드가 통지(notify) 할 때까지 기다리는 상태 |
| 일시정지 | TIMED_WAITING | 주어진 시간 동안 기다리는 상태 |
| 일시정지 | BLOCKED | 사용하고자 하는 객체의 Lock이 풀릴 때까지 기다리는 상태 |
| 종료 | TERMINATED | 쓰레드의 작업이 종료된 상태 |
쓰레드 제어
sleep()
-현재 쓰레드를 지정된 시간동안 멈추게 한다.
-sleep()은 쓰레드 자기자신에 대해서만 멈추게함
-받드시 Exception 해줘야 한다.
-특정 쓰레드.sleep은 의미가 없다. sleep은 static 메서드이기 때문에
interrupt()
-일시정지 상태인 쓰레드를 실행대기 상태
sleep() 실행 중 interrupt() 가 실행되면 예외
-sleep 단계에 interrupt 발생하면 InterruptedException 이 발생하고 catch문으로 들어온다
-interrupt가 발생하고 나면 쓰레드에서는 isInterrupted 메소드를 통해 현재 쓰레드가 interrupted 상태가 true가 된다.
예외사항으로 진행되지 않게
!Thread.currentThread().isInterrupted() 로 interrupted 상태를 체크해서 처리하면 오류를 방지할수 있다.
📝오늘의 회고
벌써 시작한지 3주가 되었다. 보충수업도 들어보면서 다시 개념을 다지고 있다.
시간이 부족하다는 느낌을 계속 받는데 효율적으로 쓸 방법을 고민해 봐야겠다.
오늘도! 쳐지지 말고 포기하지말고 힘내서 가보자고~~~