Java에서 스레드 동기화를 달성하는 전통적인 방법은 동기화 된 키워드를 사용하는 것입니다. 특정 기본 동기화를 제공하지만 동기화된 키워드는 매우 엄격합니다. 예를 들어 스레드는 잠금을 한 번만 사용할 수 있습니다. 동기화된 블록은 대기 큐의 메커니즘을 제공하지 않으며 한 스레드가 종료된 후 모든 스레드가 잠금을 취할 수 있습니다. 이로 인해 매우 오랜 기간 동안 다른 스레드에 대한 리소스가 부족할 수 있습니다. 예제의 핵심은 프린터Queue 클래스의 printJob() 메서드입니다. 잠금을 사용하여 중요한 섹션을 구현하고 하나의 실행 스레드만 코드 블록을 실행하도록 보장하려면 ReentrantLock 개체를 만들어야 합니다. 임계 섹션의 시작 부분에서 lock() 메서드를 사용하여 잠금을 제어해야 합니다. 이 예제에서는 Java에서 ReentrantLock을 사용하는 방법을 보여 주어야 합니다. 아주 좋은 설명. 나는이 예제를 잘 작동하려고노력했다. 그러나 이 예제로는 다루지 않는 고광1케이스를 하고 싶습니다.
기본 제공 모니터 잠금에 대한 Thread.holdsLock(java.lang.Object) 메서드와 유사하게 이 메서드는 일반적으로 디버깅 및 테스트에 사용됩니다. 예를 들어, 잠금이 유지되는 동안에만 호출되어야하는 메서드는 이것이 사실임을 주장 할 수 있습니다 : 재엔타런트 잠금을 사용하여 거의 50 개의 스레드가 동시에 발로 차는 몇 가지 예제를 실행했습니다 (스레드에 대한 절전 호출 없음)은 스레드가 여전히 블록에 들어가 고 있음을 발견했습니다. gh 다른 스레드는 이미 잠금을 획득했습니다. 재진입 개체를 정적 파이널(개인 정적 파이널 ReentrantLock rLock = 새 ReentrantLock())으로 만들 때 문제가 해결되었습니다. 자바 잠금 예제 자습서에 오신 것을 환영합니다. 일반적으로 다중 스레드 환경에서 작업할 때 스레드 안전을 위해 동기화된 작업을 사용합니다. 이 문서에서는 Java ReentrantLock 예제, 사용된 내부 데이터 구조 및 알고리즘의 예를 살펴보겠습니다. 이름에서 알 수 있듯이 ReentrantLock은 동일한 스레드에서 여러 번 획득할 수 있는 잠금입니다. 잠금을 획득하려는 스레드가 이미 잠금을 소유하고 있는 스레드와 같지 않으면 시도가 실패하거나 차단됩니다. 작업 범위가 지정된 경우 지정된 대기 시간이 경과하면 잠금을 획득하려는 시도가 실패합니다. ReentrantLock에 대한 자세한 내용은 여기에서 확인할 수 있습니다. 아래 예제에서 첫 번째 스레드는 잠금을 획득합니다.
또한 재진입 잠금이 재진입하지 않는 방식으로 사용되는지 확인하는 데 사용할 수도 있습니다. 그러나 이 예제에서는 ReentrantLock의 중요성을 제공하지 않습니다. 잠금을 사용하고 동일한 작업을 수행할 수 있습니까? 다중 스레드 환경에서 동기화를 제공하는 전통적인 방법은 동기화된 키워드를 사용하는 것이었습니다.