Java 5주차 (2)

신성훈·2024년 5월 3일

TIL

목록 보기
11/162
post-thumbnail

오늘의 학습 키워드

  • 데몬 쓰레드와 사용자 쓰레드
  • 쓰레드 우선순위와 쓰레드 그룹
  • 쓰레드 상태와 제어 (1)

데몬쓰레드와 사용자 쓰레드

  • 데몬쓰레드
    -보이지 않는곳(background)에서 실행되는 낮은 우선순위를 가진 쓰레드
    -보조적인 역할을 담당
    -메모리 영역을 정리해주는 가비지 컬렉터(GC)가 있다
    *우선순위가 낮다! => 상대적으로 다른 쓰레드에 비해 리소스를 적게 할당 받는다
  • 사용자 쓰레드
    -보이는 곳(foregorund) 에서 실행되는 높은 우선순위를 가진 쓰레드
    -대표적인 사용자 쓰레드로는 메인 쓰레드

    ! JVM은 사용자 쓰레드의 작업이 끝나면 데몬 쓰레드도 자동으로 종료시켜 버린다

쓰레드 우선순위와 쓰레드 그룹

  • 쓰레드 우선순위
    -쓰레드 작업의 중요도에 따라서 쓰레드의 우선순위를 부여
    -우선순위를 높게 지정하면 더 많은 작업시간을 부여받아 빠르게 처리

  • 우선순위는 최대/최소/보통 순으로 나뉜다.
    -기본 값이 보통 우선순위! (JVM에서 설정한 우선순위)

  • 쓰레드 그룹
    -모든 쓰레드들은 반드시 하나의 그룹에 포함되야 한다.
    -메인 쓰레드는 system 그룹 하위에 있는 main 그룹에 포함된다.

쓰레드 상태와 제어 (1)

  • 쓰레드 상태
    -쓰레드는 실행과 대기를 반복하며 run() 메서드를 수행
    -run() 메서드가 종료되면 실행이 멈춤
    -실행대기 -> 실행 -> 일시정지 ->실행대기 반복
상태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주가 되었다. 보충수업도 들어보면서 다시 개념을 다지고 있다.
시간이 부족하다는 느낌을 계속 받는데 효율적으로 쓸 방법을 고민해 봐야겠다.
오늘도! 쳐지지 말고 포기하지말고 힘내서 가보자고~~~

profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글