Day 63

ChangWoo·2023년 6월 7일
0

자바의 정석

목록 보기
60/71
post-thumbnail

ch 13-26,27 suspend(), resume()

suspend(), resume(), stop()

  • 쓰레드의 실행을 일시정지, 재개, 완전정지 시킨다.
void suspend() 쓰레드를 일시정지 시킨다.
void resume()  suspend()에 의해 일시정지된 쓰레드를 실행대기상태로 만든다.
void stop()    쓰레드를 즉시 종료시킨다.

  • suspend(), resume(), stop()은 교착상태에 빠지기 쉬워서 deprecated되었다.
  • 그래서 쓰레드 클래스에 정의된 suspend(), resume(), stop()을 사용하지 않고 직접 작성해서 사용한다.

ch 13-28,29 join(), yield()

join()

  • 지정된 시간동안 특정 쓰레드가 작업하는 것을 기다린다.
void join()							// 작업이 모두 끝날 때까지
void join(long millis)				// 천분의 일초 동안
void join(long millis, in nanos)    // 천분의 일초 + 나노초 동안
  • 예외처리를 해야 한다.(InterruptedException)이 발생하면 작업 재개

join() - 예시

  • GC (가비지 컬렉터)와 비슷 / 데몬쓰레드로 돌아간다.
  • 10초마다 gc(사용하지 않는 객체를 제거한다.)
  • 메모리가 부족한 경우, 쓰레드를 깨운다.
  • 그런데, 1 메모리가 부족한 경우, 2. 메모리를 사용하는 과정에서
  • join이 필요하다. (메모리 사용 전에 gc가 메모리를 정리할 시간을 주기 위해)

yeild()

  • 남은 시간을 다음 쓰레드에게 양보하고, 자신(현재 쓰레드)은 실행대기한다.
  • static 메서드로 현재 쓰레드에서만 사용 가능
  • 주어진 시간을 다 사용하지 않고 다른 실행대기 중인 쓰레드에게 양보한다.
  • yield()와 interrupt()를 적절히 사용하면, 응답성과 효율을 높일 수 있다.
  • if문이 false고 while문이 true인 경우에 if문은 일시정지가 되어 주어진 시간동안 할 일이 없다. 그럴 때, while문이 true에게 시간을 양보한다.
  • else를 활용하여 yeild()를 사용한다.
  • interrupt()를 사용하면 시간을 기다리지 않고 깨울 수 있다.
  • yeild()는 OS에게 스케줄러를 통보하는 것으로 무조건 실행되지는 않는다.
profile
한 걸음 한 걸음 나아가는 개발자

0개의 댓글