java reentrantlock 예제

안녕하세요, 간단한 예제와 같은 좋은 설명을 제공 해 주셔서 감사 합니다. 거의 50 개의 스레드가 동시에 발로 차는 몇 가지 예제를 실행했으며 재진입 잠금을 사용하여 스레드가 이미 잠금을 획득했음에도 불구하고 스레드가 여전히 블록에 들어가고 있음을 발견했습니다. 재진입 개체를 정적 파이널(개인 정적 파이널 ReentrantLock rLock = 새 ReentrantLock())으로 만들 때 문제가 해결되었습니다. 보류 카운트 정보는 일반적으로 테스트 및 디버깅 목적으로만 사용됩니다. 예를 들어, 코드의 특정 섹션을 이미 보유 된 잠금으로 입력하지 않아야하는 경우 우리는 그 사실을 주장 할 수 있습니다 : 전통적으로 Java는 스레드 상호 통신에 대한 wait(), notify() 및 notifyAll() 메서드를 제공합니다. 조건은 유사한 메커니즘을 가지고 있지만, 또한, 우리는 여러 조건을 지정할 수 있습니다 : ReentrantLock에 대한 설명뿐만 아니라 예제 프로그램에서 사용되는, 당신은 다른 무엇을 원하십니까? 예제의 핵심은 프린터Queue 클래스의 printJob() 메서드입니다. 잠금을 사용하여 중요한 섹션을 구현하고 하나의 실행 스레드만 코드 블록을 실행하도록 보장하려면 ReentrantLock 개체를 만들어야 합니다. 임계 섹션의 시작 부분에서 lock() 메서드를 사용하여 잠금을 제어해야 합니다. 안녕하세요 Pankaj, 당신은 또한 예를 들어 잠금 및 잠금 공정성의 다른 조건을 설명 하시기 바랍니다 수 있습니다. 다음 자습서에서는 Reentrant Locks의 기본 예제를 살펴보겠습니다.

Java에서 스레드 동기화를 달성하는 전통적인 방법은 동기화 된 키워드를 사용하는 것입니다. 특정 기본 동기화를 제공하지만 동기화된 키워드는 매우 엄격합니다. 예를 들어 스레드는 잠금을 한 번만 사용할 수 있습니다. 동기화된 블록은 대기 큐의 메커니즘을 제공하지 않으며 한 스레드가 종료된 후 모든 스레드가 잠금을 취할 수 있습니다. 이로 인해 매우 오랜 기간 동안 다른 스레드에 대한 리소스가 부족할 수 있습니다. 이 문서에서는 Java ReentrantLock 예제, 사용된 내부 데이터 구조 및 알고리즘의 예를 살펴보겠습니다. 이름에서 알 수 있듯이 ReentrantLock은 동일한 스레드에서 여러 번 획득할 수 있는 잠금입니다. 잠금을 획득하려는 스레드가 이미 잠금을 소유하고 있는 스레드와 같지 않으면 시도가 실패하거나 차단됩니다.

작업 범위가 지정된 경우 지정된 대기 시간이 경과하면 잠금을 획득하려는 시도가 실패합니다. ReentrantLock에 대한 자세한 내용은 여기에서 확인할 수 있습니다. 잠금 인터페이스는 Java 1.5 이후로 되어 왔습니다. java.util.concurrent.lock 패키지 내부에 정의되어 있으며 잠금을 위한 광범위한 작업을 제공합니다. 아주 좋은 설명. 나는이 예제를 잘 작동하려고노력했다. 그러나 이 예제로는 다루지 않는 고광1케이스를 하고 싶습니다. 아래 예제에서 첫 번째 스레드는 잠금을 획득합니다.