Please Enable JavaScript!
Gon[ Enable JavaScript ]

자바(Java) 실행대기 함수 Sleep 와 Wait 함수 차이와 구현 방법

자바(JAVA)
반응형

sleep()과 wait() 함수는 모두 스레드를 일시적으로 멈추게 하는 메커니즘을 가지고 있습니다. 그럼 두 함수는 차이는 무엇일까요?

 

“Thread.sleep()”은 실행 중인 스레드를 잠시 중지하고 지정된 시간 동안 대기합니다.- “Object.wait()”은 현재 스레드를 대기 상태로 전환하고, 다른 스레드에서 해당 객체의 모니터를 해제할 때까지 대기합니다. wait()를 호출하는 스레드는 해당 객체의 모니터를 반드시 소유하고 있어야 하며, “synchronized” 블록 내에서 사용되어야 합니다. 따라서, “sleep()”은 스레드의 실행을 시간적으로 제어하기 위해 사용되고, “wait()”은 스레드 간의 동기화 및 통신을 위해 사용합니다.

 


 

 

1. “sleep()”

l  “Thread.sleep()” 메서드는 현재 실행 중인 스레드를 지정된 시간 동안 일시적으로 멈춤

l  일정 시간 동안 대기하는 동안 다른 작업을 수행할 필요가 있는 경우에 사용

l  주로 스레드의 실행 속도를 제어하거나, 일정한 시간 간격으로 작업을 수행하는 등의 용도로 활용

 

2. “wait()”

l  “wait()” 메서드는 락(lock) 객체를 내에서 해당 객체의 상태가 특정 조건이 되기를 기다립니다. 이때, “wait()”은 반드시 “synchronized” 블록 내에서 호출

l  여러 스레드 간의 동기화를 위해 사용. 특정 조건이 충족될 때까지 대기하고, 다른 스레드가 조건을 충족시켜 “notify()” 또는 “notifyAll()” 메서드를 호출하여 대기 중인 스레드를 깨울 때 사용

l  스레드 간의 통신을 위해 사용되며, 스레드가 특정 조건을 확인하고 기다릴 때 유용

 

 

1. “Thread.sleep()”

 

“Thread.sleep()” 메서드는 현재 실행 중인 스레드를 지정된 시간(밀리초) 동안 대기 상태로 전환합니다. 이 메서드를 호출한 스레드는 일정 시간 동안 실행을 중지하고, 그 후에 다시 실행합니다.

public class SleepExample {
    public static void main(String[] args) {
        System.out.println("Start");
        try {
            Thread.sleep(2000); // 2초 대기
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("End");
    }
}

 

2. “Object.wait()”

 

“Object.wait()” 메서드는 스레드를 대기 상태로 전환하고, 해당 객체의 모니터(lock)를 해제합니다. 다른 스레드에서 “notify()” 또는 “notifyAll()” 메서드를 호출하여 대기 중인 스레드를 깨워야 합니다. 일반적으로 wait() 메서드는 반복문과 함께 사용되어 조건을 검사하고 기다리는 용도로 사용하고 있습니다. 

public class WaitExample {
    public static void main(String[] args) {
        final Object lock = new Object();
        System.out.println("Start");
        synchronized (lock) {
            try {
                lock.wait(2000); // 2초 동안 대기
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println("End");
    }
}
반응형
Posted by 녹두장군1
,