대기 () 및 notify ()는 객체 클래스와 직접적으로 제휴합니다. 즉, 모든 객체에는이 메소드가 있습니다. 이것은 처음에는 매우 놀랍지 만 실제로는 매우 자연 스럽습니다.이 쌍의 메소드는 차단할 때 점유 잠금 장치를 해제해야하며 잠금 장치는 모든 객체의 객체에서 사용할 수 있습니다 스레드 차단을 유발하고 객체의 잠금이 해제됩니다. 객체를 호출하는 notify () 메소드는 객체의 Wait () 메소드에 의해 방해되는 스레드에서 무작위로 선택된 차단 블록을 유발합니다 (그러나 잠겨질 때까지 실행할 수 있음).
둘째, Wait () 및 Notify ()는 모든 위치에서 호출 할 수 있지만이 쌍은 동기화 된 방법 또는 블록으로 호출해야합니다. 마찬가지로,이 메소드 쌍의 객체의 잠금 잠금 장치는 현재 스레드가 소유해야하므로 잠금을 해제 할 수 있습니다. 따라서 메소드 호출은 동기화 된 메소드 또는 블록으로 배치되어야합니다. 이 조건이 충족되지 않으면 프로그램을 여전히 컴파일 할 수 있지만 런타임 중에 불법 모니트 스테이트 외환이 나타납니다.
WAKE () 및 notify () 메소드의 위의 기능은 종종 동기화 된 메소드 또는 블록과 함께 사용하는 것으로 판단합니다. 메소드 또는 블록 제공 메소드 또는 블록 제공은 운영 체제의 기능과 유사한 방법 또는 블록을 제공하며,이 쌍은 블록 및 웨이크 업 프리미티브와 동일합니다. 메소드 모두 동기화 된 선언). 이들의 조합을 통해 운영 체제에서 일련의 절묘한 정의 알고리즘 (신호량 수량 알고리즘)을 실현하고 다양한 복잡한 스레드 간 문제를 해결하는 데 사용합니다.
대기 () 및 notify () 메소드에 대해 마지막으로 두 가지 요점을 설명합니다.
먼저 : 객체를 호출하는 Wait () 메소드에 의해 차단 스레드를 무작위로 선택하게하는 Notify () 메소드를 호출하십시오.
둘째 : Notify () 외에도 유일한 역할을 수행 할 수있는 NotifyAll ()도 있습니다. 물체에 모든 폐쇄가 들어 올려집니다. 물론 잠금을 가져 오는 스레드 만 실행 가능 상태로 들어갈 수 있습니다.
관련 대기 및 사용 데모에 알림 :
/** * <fre> * 서브 스레드 사이클 10 번, 메인 스레드 사이클이 100 회 사이클을 한 다음 서브 스레드 사이클로 10 회 다시 돌아온 다음 메인 스레드 주기로 100 회로 돌아갑니다 * * </ presle> * @author ketqi */ public class waitnotifydemo {public static void main (String [] args) {new Business (); {int i = 1; i <= 50; i ++) {int i = 1; i <= 50; i ++에 대한 시작 (); {business.min (i)} 클래스 비즈니스 {private boolean ismainthread = true; e.printstacktrace ();}} for (int j = 1; j <= 10; j ++) {System.out.println ( " + j +"의 하위 스레드 시퀀스, " + i의 루프); } ismainthread = false.notify ()} portlic synchronized void main (while (ismainthread) {e.printstacktrace ();} fors (e.printstacktrace int j = 1; J <= 100; }}위는이 기사의 모든 내용입니다.