Java에서 스레드 출력 대기
Java 애플리케이션 개발에는 여러 스레드가 동시에 실행되는 경우가 많으므로 적절한 흐름과 데이터 동기화를 보장하기 위한 조정 메커니즘이 필요합니다. . 이 문서에서는 하나의 스레드가 다른 스레드의 출력을 기다려야 하는 특정 시나리오를 다룹니다.
이 경우 애플리케이션은 애플리케이션 논리 스레드와 데이터베이스 액세스 스레드라는 두 개의 스레드를 사용합니다. 두 스레드는 모두 애플리케이션의 수명 동안 지속되고 동시에 작동해야 하지만 애플리케이션 논리 스레드는 처음에는 데이터베이스 액세스 스레드가 준비될 때까지 기다려야 합니다.
잠재적 솔루션
질문 적합한 솔루션을 찾는 데 어려움을 겪습니다. 데이터베이스 스레드는 애플리케이션 종료 중에만 종료되므로 Thread.join()을 사용하는 것은 옵션이 아닙니다. 또한 데이터베이스 준비 상태를 폴링하기 위해 빈 루프를 생성하면 불필요한 CPU 소비가 발생합니다.
CountDownLatch 접근 방식
권장 솔루션은 카운터 메커니즘을 사용하는 CountDownLatch 클래스를 활용합니다. . 카운터는 1로 초기화되어 완료하는 데 필요한 하나의 작업을 나타냅니다.
앱 스레드 실행
애플리케이션 로직 스레드의 코드에는 다음이 포함됩니다.
CountDownLatch latch = new CountDownLatch(1); latch.await();
latch.await() 메서드는 래치 카운터가 0에 도달하여 데이터베이스 초기화 완료 신호를 보낼 때까지 추가 실행을 차단합니다.
데이터베이스 스레드 실행
한 번 데이터베이스 스레드는 초기화를 완료하고 다음을 실행합니다.
latch.countDown();
래치 카운터를 줄이면 앱 스레드가 대기 상태에서 해제됩니다.
이 접근 방식은 두 스레드를 효과적으로 동기화하여 애플리케이션 논리 스레드가 계속 진행되도록 합니다. 데이터베이스 스레드가 준비된 후에만 가능합니다. 스레드 조정을 위한 효율적인 비차단 메커니즘을 제공하여 루프 차단이나 데이터베이스 스레드 중단의 단점을 방지합니다.
위 내용은 Java에서 스레드를 동기화하는 방법: 애플리케이션 논리 스레드는 데이터베이스 스레드가 초기화를 완료할 때까지 어떻게 기다릴 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!