>  기사  >  Java  >  sleep(), wait(), Yield()의 차이점과 용도

sleep(), wait(), Yield()의 차이점과 용도

零下一度
零下一度원래의
2017-06-30 09:56:482997검색

sleep, 스레드가 sleep되어 직선 스레드가 일정 시간 동안 일시 중지되고 타이밍 대기 상태에 들어갈 수 있습니다.

방법: static void sleep(long millis) sleep을 호출한 후 현재 스레드는 지정된 시간 내에 CPU를 포기합니다. sleep이 위치한 스레드는 실행할 기회를 얻지 못합니다. 이 상태의 스레드는 동기화 잠금/동기화 수신기를 해제하지 않습니다.

   이 방법은 네트워크 지연을 시뮬레이션하는 데 더 많이 사용되므로 동일한 리소스에 동시에 액세스하는 여러 스레드의 오류 효과를 더욱 분명하게 만듭니다.

 잠깐, 스레드 통신 방식인 java.lang.Object 클래스는 스레드 통신을 수행하기 위한 두 가지 유형의 방식을 제공합니다.

  wait(): 이 메소드를 실행하는 스레드 객체는 동기화 잠금을 해제합니다. JVM은 스레드를 대기 풀에 저장하고 다른 스레드가 스레드를 깨울 때까지 기다립니다.

 notify(): 이 메서드를 실행하는 스레드는 대기 풀에서 대기 중인 모든 스레드를 깨우고 스레드를 잠금 풀로 전송하여 대기합니다.

 notifyAll(): 이 메서드를 실행하는 스레드는 대기 풀에 대기 중인 모든 스레드를 깨우고 잠금 풀로 전송하여 대기합니다.

  (참고: 위 메서드는 동기 모니터링 잠금 개체에 의해서만 호출될 수 있습니다. 그렇지 않으면 IllegalMonitorStateException. 오류가 보고됩니다.)

yield, 스레드 예의는 현재 스레드 개체가 스케줄러에게 이를 요청한다는 것을 의미합니다. CPU를 포기할 의향이 있지만 스케줄러는 메시지를 무시해도 됩니다.

  이 메서드를 호출한 후 스레드 개체는 준비 상태에 들어가므로 스레드가 Yield()를 호출한 후 스레드 스케줄러가 이를 재실행하도록 예약하는 것이 전적으로 가능합니다.

 Java7에서 제공하는 문서를 보면 이 방법이 개발에 거의 사용되지 않음을 알 수 있습니다. 이 방법은 주로 디버깅이나 테스트에 사용되며 다중 스레드 경쟁 조건으로 인한 오류를 해결하는 데 도움이 될 수 있습니다.

추가: 휴면 방법과 항복 방법의 차이점:

 1. 둘 다 현재 실행 중인 스레드가 CPU를 포기하고 다른 스레드에게 실행 기회를 줄 수 있습니다.

  2. sleep 메소드는 다른 스레드에게 실행 기회를 주지만 다른 스레드의 우선순위를 고려하지 않습니다. 항복 메소드는 우선순위가 동일하거나 더 높은 스레드에만 실행 기회를 제공합니다.

  3. 스레드는 sleep 메서드를 호출한 후 타이밍 대기 상태로 들어갑니다. 항복 메서드를 호출한 후 스레드는 준비 상태로 들어갑니다.

스레드 수명 주기 다이어그램:

 

위 내용은 sleep(), wait(), Yield()의 차이점과 용도의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.