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");
}
}
'자바(JAVA)' 카테고리의 다른 글
자바 객체 지향 프로그램, 객체 생성과 사용 (5) | 2024.11.09 |
---|---|
자바 (Java) System.out 콘솔 프린트 사용하기 (0) | 2024.11.09 |
자바(Java) 다형성, 오버라이딩(Overriding), 오버로딩(Overloading) (3) | 2024.11.09 |
자바(Java) for 문 이용해서 피라미드, 역 피라미드 만드는 방법 (2) | 2024.08.04 |
깃허브(GitHub) 소스 업데이트 로그인 Token 생성하기 (0) | 2024.04.05 |
자바(Java) Scanner 클래스 사용하기 (0) | 2024.04.03 |
자바(Java) do-while 반복문 사용하기 (0) | 2024.03.29 |
자바(Java) while 반복문 사용하기 (0) | 2024.03.27 |