Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java에서 스레드의 wait() 및 wait(long) 메서드를 언제 호출할 수 있습니까?

<시간/>

wait() 메소드가 객체에서 호출되면 현재 스레드가 다른 스레드가 notify() 를 호출할 때까지 대기합니다. 또는 notifyAll() 이 개체에 대한 메서드인 반면 wait(long timeout) 다른 스레드가 notify()를 호출할 때까지 현재 스레드가 대기하도록 합니다. 또는 notifyAll() 이 개체에 대한 메서드 또는 지정된 시간 초과 시간이 경과했습니다.

대기()

아래 프로그램에서 wait() 일 때 개체에서 호출되면 스레드가 실행 중에서 대기 상태로 전환됩니다. . 다른 스레드가 notify()를 호출하기를 기다립니다. 또는 notifyAll() 실행 가능한 상태로 들어갈 수 있도록 교착 상태 형성될 것입니다.

예시

MyRunnable은 Runnable을 구현합니다. { this.wait(); System.out.println("대기 상태의 스레드, 동일한 개체의 다른 스레드가 notify() 또는 notifyAll()을 호출하기를 기다리고 있습니다."); } catch(InterruptedException 즉) { ie.printStackTrace(); } } }}공개 클래스 WaitMethodWithoutParameterTest { 공개 정적 무효 메인(String[] 인수) { MyRunnable myRunnable =new MyRunnable(); 스레드 스레드 =new Thread(myRunnable, "Thread-1"); thread.start(); }}

출력

run() 메소드에서


대기(길게)

아래 프로그램에서 When wait(1000) 개체에 대해 호출되면 스레드가 실행 중에서 대기 상태로 전환됩니다. 알림() 또는 notifyAll() 시간 초과 시간이 경과한 후 호출되지 않습니다. 스레드는 대기 상태에서 실행 가능 상태로 전환됩니다.

예시

MyRunnable은 Runnable을 구현합니다. 시도 { this.wait(1000); System.out.println("대기 상태의 스레드, 동일한 개체의 다른 스레드가 notify() 또는 notifyAll()을 호출하기를 기다리고 있습니다."); } catch(InterruptedException 즉) { ie.printStackTrace(); } } }}공개 클래스 WaitMethodWithParameterTest { 공개 정적 무효 메인(String[] 인수) { MyRunnable myRunnable =new MyRunnable(); 스레드 스레드 =new Thread(myRunnable, "Thread-1"); thread.start(); }}

출력

대기 상태의 run() methodThread에서 동일한 객체의 다른 스레드가 notify() 또는 notifyAll()을 호출하기를 기다립니다.