![](http://gadget-info.com/img/difference-between/706/difference-between-sleep.jpg)
비교 차트
비교의 근거 | 자다 | 기다림 |
---|---|---|
기본 | Sleep 메서드는 객체가 중단 될 때까지 객체에 대한 잠금을 해제하지 않습니다. | Wait 메서드는 객체에 대한 잠금을 해제하여 notify 또는 notifyAll 메서드가 호출 될 때까지 다른 객체가 실행되도록합니다. |
수업 | Sleep 메서드는 Thread 클래스에 정의되어 있습니다. | Wait 메소드는 Object 클래스에서 정의됩니다. |
동기화 됨 | 슬립 메서드는 동기화 된 컨텍스트 내에서 호출 될 필요가 없습니다. | 대기 메서드는 동기화 된 컨텍스트 내에서 호출되어야합니다. |
완성 | 슬립 메소드 실행은 쓰레드가 쓰레드를 인터럽트하거나 슬립 메소드의 시간이 만료되면 완료된다. | Notify () 또는 notifyAll () 메소드가 인터럽트 할 때 대기 메소드의 실행이 완료됩니다. |
공전 | 수면 방법은 정적 방법입니다. | 대기 메서드는 정적이 아니기 때문에 호출하는 데 객체가 필요한 이유입니다. |
실행 | sleep 메소드는 현재 스레드에서 실행됩니다. | wait 메소드는 객체에서 실행됩니다. |
예외 | InterruptedException | IllegalArgumentException, IllegalMonitorStateException, InterruptedException |
수면 방법의 정의
sleep 메서드는 Thread 클래스의 정적 메서드입니다. sleep 메소드는 스레드가 특정 시간 동안 어떤 작업도 수행하지 않으려는 경우 호출됩니다. sleep 메소드는 메소드의 시간이 만료되거나 실행 중 다른 스레드에 의해 인터럽트 될 때 실행을 완료합니다. sleep 메소드가 완료된 후 스레드는 다시 실행 가능 상태를 얻습니다. 아래의 수면 방법 중 두 가지가 있습니다.
public static native void sleep (long millisecond); public static void sleep (long milliseconds 및 int nanosecond);
위의 두 가지 형식에서 수면 방법의 두 가지 형태로 모두 시간을 볼 수 있습니다. 이것은 스레드가 항상 매개 변수에 언급 된 특정 시간 동안 대기하기 때문입니다. sleep 메서드는 실행 중에 다른 스레드에 의해 인터럽트 될 수 있습니다. 따라서 InterruptedExecption을 throw 할 수 있습니다. try / catch 블록 또는 Throws 키워드에 의해 예외가 처리되는지주의해야합니다. 그렇지 않으면 컴파일 시간 오류가 발생합니다. sleep 메서드는 실행시 현재 개체에 대한 잠금을 유지하고 실행을 완료 할 때까지 다른 개체를 실행할 수 없도록합니다.
대기 방법의 정의
Object 클래스에 정의 된 메서드가있을 때까지 기다립니다. wait 메소드는 여러 태스크 (스레드)가 한 번에 하나씩 동일한 자원에 대해 고민 할 때 사용됩니다. 호출 될 때 wait 메소드는 wait 메소드를 호출 한 오브젝트에 대한 잠금을 해제합니다. wait 메소드에 의해 해제 된 객체의 잠금을 다시 시작하는 notify 메소드가 호출 될 때까지 다른 객체가 실행될 수있는 기회를 제공합니다. wait 메소드의 형식은 다음과 같습니다.
기다림(); 대기 (긴 밀리 세컨드); wait (long millisecond, int nanosecond);
위의 세 가지 형태의 wait 메소드 에서처럼 첫 번째 메소드에는 시간 매개 변수가 없으므로 notify 또는 notifyAll 메소드가 호출되지 않을 때까지 wait 메소드의 실행이 계속된다. 나머지 두 메소드에는 시간 매개 변수가 있습니다. 그래서 그들은 시간이 만료 될 때까지 또는 시간이 끝나기 전에 notify 나 noitfyAll 메소드가 호출 될 때까지 실행합니다. wait 메서드는 예외를 throw 할 수 있습니다. 건네받은 time 인수가 부의 경우는 IllegalArgumentException가 슬로우됩니다. IllegalMonitorStateException - 현재의 thread가 자원을 사용하고 있지 않는 경우 InterruptedException - wait 메서드가 중단되었을 경우.
Java의 절전 모드와 대기 모드의 주요 차이점
- 절전 모드와 대기 모드를 구별하는 주요 포인트는 일시 중단 메서드가 중단되거나 시간이 끝날 때까지 개체에 대한 잠금을 유지한다는 것입니다. 그러나 wait 메소드는이를 호출하는 객체에 대한 잠금을 해제하고 다른 객체에 실행 기회를 제공합니다.
- sleep 메서드는 Thread 클래스에 정의되어 있지만 wait 메서드는 Object 클래스에 정의되어 있습니다.
- sleep 메소드는, 동기 된 문맥으로부터 불려 갈 필요는 없습니다. 그러나 wait 메소드는 synchronized에서 호출해야합니다.
- sleep 메소드는 메소드의 시간이 만료되었거나 다른 스레드에 의해 인터럽트 된 경우에 활성화됩니다. 대기 메서드가 깨어났다.
통지 또는 모든 통지 메소드가 호출 될 때. - sleep 메서드는 정적 메서드이며 wait 메서드는 정적 메서드는 아닙니다 .
- sleep 메소드는 현재 스레드에서 실행되는 반면 wait 메소드는 호출하는 객체에서 실행됩니다.
- sleep 메소드에 의해 슬로우 된 예외는 InterruptedException입니다 만, wait 메소드에 의해 예외가 Throw되는 것은 IllegalArgumentException, IllegalMonitorStateException, InterruptedException 입니다.
결론:
여러 스레드가 동일한 자원을 하나씩 사용하려는 경우 wait 메소드를 사용해야합니다. 스레드가 작업을 수행하지 않으려면 sleep 메소드를 사용해야합니다.