English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

ReentrantLock과 Java에서 동기 간의 차이

여러 스레드를 통해 공유 자원을 잠금을 설정할 수 있는 두 가지 방법이 있습니다. 하나는 재입력 잠금(Or ReadWriteLock)이고, 다른 하나는 Synchronized 메서드를 사용하여 설정합니다.

Java 5의 Java 동기 패키지에서 ReentrantLock 클래스가 제공됩니다. 

이것은 Lock 인터페이스의 구현입니다. java docs에 따르면, Lock 인터페이스의 구현은 동기 메서드를 사용하여 얻을 수 있는 작업보다 더 넓은 작업을 제공합니다.

순서재입력 락동기화됨
1
락을 얻는 방법 
재입력 락 클래스가 제공합니다lock()스레드를 통해 공유 자원 잠금을 얻는 방법 
synced 키워드를 작성하면 충분합니다  
2
락 해제 
락을 해제하려면 프로그래머가 호출해야 합니다unlock()메서드
숨겨진 완료 
3
 중지 가능성
lockInterruptible() 메서드를 사용하여 스레드를 중지할 수 있습니다  
스레드를 중지할 방법이 없습니다
4
공정 
이 클래스의 생성자는 공정 파라미터를 가지고 있습니다. true로 설정하면 가장 기다린 시간이 가장 긴 대상에 잠금이 부여됩니다 *스레드의 접근 권한

락은 특정한 접근 권한을 보장하지 않습니다
5
락 해제 순서 
락은 어떤 순서로든 해제될 수 있습니다 
락은 잠금을 얻은 순서로 해제되어야 합니다 

ReentrantLock의 예제

public class ReentrantLockExample implements Runnable{
   private Lock lock=new ReentrantLock();
   @Override
   public void run() {
      try {
         lock.lock()
         //일부 자원을 잠금
      }
      catch (InterruptedException e) {
         e.printStackTrace();
      }
      finally {
         lock.unlock();
      }
   }
}

SynchronizedLock의 예제

public class SynchronizedLockExample implements Runnable{
   @Override
   public void run() {
      동기화된 (자원) {
         //일부 자원을 잠금
      }
   }
}