sleep()과 wait()은 스레드를 일시적으로 중지하는 데 사용되는 메서드이다. 하지만 개념과 목적이 다르다.
sleep() 메서드는 주어진 시간 동안 스레드를 일시적으로 중지한다. 이는 정확한 시간 간격을 기다리거나, 일정한 딜레이를 주거나, 스레드의 실행을 잠시 멈출 때 유용하다. sleep()은 주어진 시간이 경과하면 자동으로 깨어나 다음 작업을 계속한다. 주로 시간 기반 작업을 수행할 때 사용된다.
javaCopy code
try {
Thread.sleep(1000); // 1초 동안 스레드 중지
} catch (InterruptedException e) {
e.printStackTrace();
}
반면, wait() 메서드는 스레드 간의 동기화를 위해 사용된다. 일반적으로 객체의 락을 획득한 스레드가 wait()을 호출하면, 그 스레드는 대기 상태로 전환되고 해당 객체의 락을 해제한다. 이후 다른 스레드가 해당 객체의 락을 획득하고 작업을 수행할 수 있다.
wait()은 notify() 또는 notifyAll() 메서드를 사용하여 대기 중인 스레드를 깨운다.
javaCopy code
synchronized (lock) {
try {
lock.wait(); // 다른 스레드에 의해 깨어날 때까지 대기
} catch (InterruptedException e) {
e.printStackTrace();
}
}
wait()은 스레드 간의 협력적인 동기화에 사용되며, 특정 조건이 충족될 때까지 대기하고 다른 스레드가 알림을 보낼 때까지 대기한다. 이를 통해 스레드 간의 조건부 실행을 가능하게 한다.
결론적으로, sleep()은 시간 기반의 일시적인 중지에 사용되는 메서드이며, wait()은 스레드 간의 동기화 및 조건부 실행에 사용되는 메서드이다. sleep()은 시간 지연을 위해 사용되고, wait()은 다른 스레드와의 협력적인 동기화를 위해 사용된다.
'Java & Spring' 카테고리의 다른 글
Log Level (1) | 2023.12.05 |
---|---|
커넥션 풀 VS 캐시 (1) | 2023.12.05 |
NginX (1) | 2023.12.05 |
Apache Kafka (2) | 2023.12.05 |
스크래핑 (1) | 2023.12.05 |