Lock(), UnLock(), ReentrantLock(), TryLock()이란 무엇이며 Java의 Synchronized Block과 어떻게 다른가요?]

게시 됨: 2020-07-05

이 튜토리얼에서는 Lock(), UnLock(), ReentrantLock(), TryLock() 및 이것이 Java의 Synchronized Block과 어떻게 다른지 살펴보겠습니다.

아래 질문도 있는 경우 올바른 위치에 있습니다.

  • 자바의 잠금
  • Java 잠금 예제 및 동시성 잠금 대 동기화
  • Java 동시성 자습서 – 재진입 잠금
  • 동기화 – Java에 대한 적절한 잠금/잠금 해제 사용
  • 자바 – 동기화 대 잠금
  • 자바 잠금 해제 예
  • 자바의 잠금 메커니즘
  • 자바 잠금 잠금 해제 다른 스레드

시작하자. 1. 각각의 용어를 이해하고 실제 사례를 살펴보겠습니다.

잠그다():

java.util.concurrent.locks . 잠금은 잠금이 Java의 동기화된 블록보다 더 정교할 수 있다는 점을 제외하고 동기화된 블록과 같은 스레드 동기화 메커니즘입니다. 기본 제공 동기화 및 모니터와 구별되는 조건을 잠그고 대기하기 위한 프레임워크를 제공하는 인터페이스 및 클래스입니다.

터놓다():

UnLock()은 Object에 대한 잠금을 해제합니다.

재진입 잠금():

ReentrantLock 은 마지막으로 성공적으로 잠금이 해제되었지만 아직 잠금 해제되지 않은 스레드가 소유 합니다. lock 을 호출하는 스레드는 잠금을 다른 스레드가 소유하지 않은 경우 성공적으로 잠금을 획득하여 반환됩니다. 현재 스레드가 이미 잠금을 소유하고 있으면 메서드가 즉시 반환됩니다.

TryLock():

TryLock()은 호출 시 사용 가능한 경우에만 잠금을 획득합니다.

팁-1

단순히 개체를 잠그는 경우 synchronized.

동기화를 사용하면 매우 명확하고 잘못될 수 없습니다.

예시 세부사항:

  1. 클래스 생성: CrunchifyLockTutorial.java
  2. 내부 클래스 생성: Company 및 CrunchifyLoop
  3. Main에서 Company 클래스의 두 개체를 만듭니다.
  4. 해당 개체에서 10에 대한 스레드 루프 시작
  5. Company1이 Company2와 통신하는 동안 개체를 잠급니다. 동시에 - Company2Company1 과 대화하기를 원하면 - Conflicting - Lock이 이미 존재한다고 표시됩니다. (두 회사는 이미 논의 중입니다).

산출:

팁-2

java.util.concurrent 의 유틸리티가 synchronized , volatile 또는 wait 와 같은 저수준 기본 요소로 수행하는 모든 작업을 수행할 수 있습니다.