Object.wait()는 스레드 안전성을 보장하고 IllegalMonitorStateException을 방지하기 위해 동기화된 블록 내에 있어야 합니다.
잠깐 객체와 관련된 모니터를 해제하여 다른 스레드가 객체를 획득할 수 있도록 합니다. wait()가 동기화된 블록 외부에서 호출될 수 있는 경우 예측할 수 없는 동작이 발생할 수 있습니다.
동기화된 wait() 없이 차단 대기열 구현을 고려하세요.
class BlockingQueue { Queue<String> buffer = new LinkedList<>(); public void give(String data) { buffer.add(data); notify(); // Signal waiting consumer } public String take() throws InterruptedException { while (buffer.isEmpty()) { wait(); // Suspend thread without synchronization } return buffer.remove(); } }
이 예에서는:
이 동기화 문제는 특정 구현에 관계없이 대기/알림 메커니즘에 보편적으로 적용됩니다. 동기화가 없으면 항상 경쟁 조건과 예측할 수 없는 스레드 동작의 위험이 있습니다. 따라서 "동기화 내부 대기" 규칙은 스레드 안전성을 보장하고 이러한 문제를 방지합니다.
위 내용은 Object.wait()가 항상 동기화된 블록 내에서 호출되어야 하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!