wait,notify,sleep,interrupt 비교 분석

인용 하 다.
자바 의 각 스 레 드 와 관련 된 wait(),notify(),sleep(),interrupt()방법 을 비교 분석 합 니 다.
방법 약술
Thread 클래스
  • sleep:현재 실행 중인 스 레 드 를 일시 정지 합 니 다.(클래스 방법)
  • yield:현재 실행 중인 스 레 드 를 중단 하고 다른 스 레 드 를 실행 합 니 다.(클래스 방법)
  • join:이 스 레 드 가 종 료 될 때 까지 기 다 립 니 다
  • interrupt:이 스 레 드 를 중단 합 니 다

  • 스 레 드 가 wait(),sleep(),join()또는 I/O 작업 을 호출 할 때 Interrupted Exception 또는 Closed ByInterrupted Exception 을 받 습 니 다.
    오 브 젝 트 클래스
  • wait:현재 실행 중인 스 레 드 를 중단 하고 notify()또는 notify All()방법 을 호출 하거나 시간 을 초과 할 때 까지 대기 상 태 를 종료 합 니 다
  • notify:이 대상 에서 기다 리 는 스 레 드 를 깨 웁 니 다
  • notify All:이 대상 에서 기다 리 는 모든 스 레 드 를 깨 웁 니 다

  • 자세하게 분석 하 다
    sleep VS wait
    sleep()과 wait()방법 은 현재 실행 중인 스 레 드 를 일시 정지 하고 CPU 자원 을 양도 하 는 것 입 니 다.
    방법.
    소속 류
    방법 유형
    자물쇠.
    해제 방법
    장면
    용도.
    sleep
    Thread
    정적 방법
    자 물 쇠 를 풀 지 않 음
    timeout, interrupt
    무제 한
    스 레 드 내 제어
    wait
    Object
    비 정적 방법
    자 물 쇠 를 풀다
    timeout, notify, interrupt
    동기 화 블록
    스 레 드 간 통신
    public static void sleep(long millis) throws InterruptedException
    public static void sleep(long millis, int nanos) throws InterruptedException
    
    public final void wait() throws InterruptedException
    public final void wait(long timeout) throws InterruptedException
    public final void wait(long timeout, int nanos) throws InterruptedException
    

    wait && notify
    대상 의 wait(),notify(),notify All()방법 을 호출 하 는 스 레 드 는 이 대상 모니터 의 소유자 여야 합 니 다.흔히 볼 수 있 는 장면 은 synchronized 키워드 의 구문 블록 내부 에서 이 세 가지 방법 을 사용 하 는 것 입 니 다.스 레 드 에서 wait(),notify(),notify All()방법 을 직접 사용 하면 이상 IllegalMonitor State Exception 을 던 집 니 다.던 진 이상 은 특정한 스 레 드 가 대상 을 기다 리 려 는 모니터 를 나타 냅 니 다.또는 대상 을 기다 리 고 있 는 다른 모니터 에 알 리 려 고 합 니 다.
    wait()방법의 스 레 드 를 호출 하고 이 스 레 드 의 interrupt()방법 을 호출 하면 대상 잠 금 을 다시 시도 합 니 다.대상 자 물 쇠 를 가 져 와 야 이상 을 던 지기 시작 합 니 다.그렇지 않 으 면 이 스 레 드 후의 프로그램 을 실행 합 니 다.
    interrupt
    interrupt()방법의 작업 은 중단 상 태 를 바 꾸 는 것 일 뿐 실행 중인 스 레 드 를 직접 중단 하 는 것 이 아 닙 니 다.인 터 럽 트 의 진정한 원 리 는 스 레 드 가 Object.wait(),Thread.join()또는 sleep()방법 에 의 해 막 혔 을 때 인 터 럽 트()방법 을 호출 한 후 인 터 럽 트 상 태 를 바 꾸 는 것 입 니 다.wait/join/sleep 이 방법 들 은 내부 적 으로 스 레 드 의 인 터 럽 트 상태 값 이 바 뀌 었 을 때 Interrupted Exception 이상 을 계속 검사 합 니 다.차단 되 지 않 은 스 레 드 에 대해 서 는 interrupt()방법 을 호출 하 는 것 은 아무런 역할 이 없습니다.
    yield
    yield()방법 은 현재 스 레 드 가 CPU 실행 시간 을 양보 하지만 현재 스 레 드 가 가지 고 있 는 자 물 쇠 를 방출 하지 않 습 니 다.yield()방법 을 실행 한 후 스 레 드 가 Running 상태 에서 Runnable 상태 로 바 뀌 었 습 니 다.Runnable 상태 라면 곧 CPU 에 의 해 다시 Running 상태 로 들 어 갈 수도 있 습 니 다.

    좋은 웹페이지 즐겨찾기