Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java에서 ReentrantLock과 Synchronized의 차이점 - 2020 - 다른 사람

<시간/>

여러 스레드에서 공유 리소스를 잠그는 방법에는 두 가지가 있습니다. 하나는 재진입 잠금(또는 ReadWriteLock)이고 다른 하나는 동기화된 방법을 사용하는 것입니다.

ReentrantLock 클래스는 Java 5의 Java 동시성 패키지에 제공되었습니다.

Lock 인터페이스의 구현이며 Java 문서에 따르면 Lock 인터페이스의 구현은 동기화된 방법을 사용하여 얻을 수 있는 것보다 더 광범위한 작업을 제공합니다.

Sr. 아니요. 재진입 잠금 동기화됨
1
잠금 획득
재진입 잠금 클래스는 스레드에 의해 공유 리소스에 대한 잠금을 얻기 위해 lock() 메서드를 제공합니다.
잠금을 얻으려면 동기화된 키워드를 작성하기만 하면 됩니다.
2
잠금 해제
잠금을 해제하려면 프로그래머가 잠금 해제() 메서드를 호출해야 합니다.
암시적으로 수행됩니다.
3
인터럽트 기능
lockInterruptably() 메서드는 스레드를 인터럽트하는 데 사용할 수 있습니다.
스레드를 인터럽트할 방법이 없습니다.
4
공정성
이 클래스의 생성자에는 공정성 매개변수가 있습니다. true로 설정하면 잠금이 가장 오래 대기하는 액세스 권한을 부여하는 것을 선호합니다.
* 실
잠금이 특정 액세스 순서를 보장하지 않습니다.
5
잠금 해제 순서
잠금을 어떤 순서로든 해제할 수 있습니다.
잠금을 획득한 순서대로 잠금을 해제해야 합니다.

ReentrantLock의 예

public class ReentrantLockExample implements Runnable{
   private Lock lock=new ReentrantLock();
   @Override
   public void run() {
      try {
         lock.lock()
         //Lock some resource

      }
      catch (InterruptedException e) {
         e.printStackTrace();
      }
      finally {
         lock.unlock();
      }
   }
}

SynchronizedLock의 예

public class SynchronizedLockExample implements Runnable{
   @Override
   public void run() {
      synchronized (resource) {
         //Lock some resource
      }
   }
}