JH's Develog

[JAVA] Object level lock vs Class level lock 본문

JAVA

[JAVA] Object level lock vs Class level lock

jhkimmm 2022. 7. 5. 01:19

synchronized 블럭을 이용해서 쓰레드를 동기화 할때 괄호안에 아래와 같이 객체의 참조변수(this)가 들어가는 경우가 있고 Class 클래스(.class)가 들어가는 경우가 있습니다.

객체의 참조변수가 들어가는 경우를 Object level lock이라고 하고 Class 클래스가 들어가는 경우를 Class level lock이라고 합니다.

// Object Level locking
public class ObjectLevelLockExample {
   public void objectLevelLockMethod() {
      synchronized (this) {
         //...
      }
   }
}

// Class Level locking
public class ClassLevelLockExample {
   public void classLevelLockMethod() {
      synchronized (ClassLevelLockExample.class) {
         //...
      }
   }
}

두 가지 lock의 차이점

- Object level lock

  • non-static 메서드나 코드의 non-static 블럭을 동기화 할 때 사용합니다.
  • 즉, non-static 데이터를 thread safe하게 만들 때 사용합니다.
  • 클래스의 모든 인스턴스가 각자의 lock을 가집니다.

- Class level lock

  • 런타임에 사용 가능한 모든 인스턴스에서 여러 스레드가 동기화된 블록에 들어가는 것을 방지하려는 경우 사용할 수 있습니다.
  • 즉, static 데이터를 thread safe하게 만들기 위해서 사용해야합니다.
  • 클래스의 인스턴스가 여러개 있어도, 클래스 하나당 하나의 lock만 존재합니다.

Class level lock 사용예시

싱글턴 패턴을 Thread Safe하게 구현하는 방법 중에, Double-Check Locking 방식으로 구현할 때 사용할 수 있습니다.

public class DoubleCheckSingleton {
    private static volatile DoubleCheckSingleton instance;
    public static DoubleCheckSingleton getInstance() {
        if( instance == null ) {                    
            synchronized (DoubleCheckSingleton.class) {
                if (instance == null) {
                    instance = new DoubleCheckSingleton();
                }
            }
        }
        return instance;
    }
    ...
}

위 코드의 DoubleCheckSingleton 클래스는 클래스당 오직 하나의 인스턴스만 생성할 수 있도록 하기 위해

instance라는 static 변수와 getInstance()라는 static 메서드를 가지고 있으므로 Class level lock을 적용해야 합니다.

 

 

[참고]

 

Difference between Object level lock and Class level lock in Java

Difference between Object level lock and Class level lock in Java In multithreading environment, two or more threads can access the shared resources simultaneously which can lead the inconsistent behavior of the system. Java uses concept of locks to restri

www.tutorialspoint.com

 

Comments