21.01.21-42일차

2857 단어 쓰레드ThreadThread

🚗 쓰레드(Thread)

🚓 데몬 쓰레드(daemon thread)

  • 일반 쓰레드(non-daemon thread)의 작업을 돕는 보조적인 역할 수행
  • 일반 쓰레드가 모두 종료되면 자동적으로 종료
  • 가비지 컬렉터, 자동저장, 화면 자동갱신 등에 사용된다
  • 무한루프와 조건문을 이용해서 실행 후 대기하다가 특정조건이 만족되면 작업을 수행하고 다시 대기하도록 작성
    * setDaemon(boolean on)은 반드시 start()를 호출하기 전에 실행되어야 함.
    그렇지않으면 IllegalThreadStateException이 발생


🚓 쓰레드의 상태


🚓 쓰레드의 실행제어

  • 쓰레드의 실행을 제어할 수 있는 메서드

🚕 sleep()

  • 현재 쓰레드를 지정된 시간동안 멈추게 함
  • 예외처리를 해야함 (InterruptedException이 발생하면 깨어남)
try{
   Thread.sleep(1, 500000); // 쓰레드를 0.0015초 동안 멈추게 함 
} catch(InterruptedException e) {}  // 필수 예외처리
새로운 메서드 하나 만들어서 sleep()대신 호출. 코드가 더 심플해짐 
void delay(long millis){
   try{
       Thread.sleep(millis);
   } catch(InterruptedException e) {}
}
  • 특정 쓰레드를 지정해서 멈추게 하는 것은 불가능

🚕 interrupt()

  • 대기상태(WATING)인 쓰레드를 실행대기 상태(RUNNABLE)로 만든다.

🚕 suspend(), resume(), stop()

  • 쓰레드의 실행을 일시정지(suspend), 재개(resume), 완전정지(stop) 시킨다.
  • suspend(), resume(), stop()은 교착상태에 빠지기 쉬워서 deprecated되었다 -> 직접 구현해야함

🚕 join()

  • 지정된 시간동안 특정 쓰레드가 작업하는 것을 기다린다.
  • 예외처리를 해야한다 (InterruptedException이 발생하면 작업 재개)

🚕 yield()

  • 남은 시간을 다음 쓰레드에게 양보하고 자신(현재 쓰레드)은 실행대기한다.
  • yield()와 interrupt()를 적절히 사용하면, 응답성과 효율을 높일 수 있다.


🚋 출처

자바의 정석 책 & 유튜브

좋은 웹페이지 즐겨찾기