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

Java에서 객체 수준 잠금과 클래스 수준 잠금의 차이점

<시간/>

멀티스레딩 환경에서 둘 이상의 스레드가 공유 리소스에 동시에 액세스할 수 있으므로 시스템의 일관성 없는 동작이 발생할 수 있습니다. Java는 잠금 개념을 사용하여 공유 리소스 또는 객체의 동시 액세스를 제한합니다. 잠금은 두 가지 수준으로 적용할 수 있습니다. -

  • 객체 수준 잠금 - 비정적 메서드 또는 코드의 비정적 블록이 하나의 스레드에서만 액세스되어야 할 때 사용할 수 있습니다.
  • 클래스 수준 잠금 - 런타임에 사용 가능한 모든 인스턴스에서 여러 스레드가 동기화된 블록에 들어가는 것을 방지하려는 경우 사용할 수 있습니다. 정적 데이터를 스레드로부터 안전하게 만들기 위해 항상 사용해야 합니다.
Sr. 아니요.

객체 수준 잠금
클래스 수준 잠금

1

기본

비정적 메소드를 원하거나 코드의 비정적 블록이 하나의 스레드에서만 액세스되어야 할 때 사용할 수 있습니다.

여러 스레드가 런타임에 사용 가능한 모든 인스턴스에서 동기화된 블록에 들어가는 것을 방지하려는 경우 사용할 수 있습니다.

2

정적/비정적

비정적 데이터 스레드를 안전하게 만드는 데 항상 사용해야 합니다.

정적 데이터를 스레드로부터 안전하게 만들기 위해 항상 사용해야 합니다.


3

잠금 수

클래스의 모든 객체에는 자체 잠금 장치가 있을 수 있습니다.

클래스의 여러 객체가 존재할 수 있지만 항상 한 클래스의 클래스 객체 잠금을 사용할 수 있습니다.

클래스 레벨 잠금의 예

public class ClassLevelLockExample {
   public void classLevelLockMethod() {
      synchronized (ClassLevelLockExample.class) {
         //DO your stuff here
      }
   }
}

객체 레벨 잠금의 예

public class ObjectLevelLockExample {
   public void objectLevelLockMethod() {
      synchronized (this) {
         //DO your stuff here
      }
   }
}