게으른 개발자의 끄적거림

Java synchronized란? (동기화)

끄적잉 2024. 1. 30. 22:11
반응형

 

 `Java`에서 `synchronized` 키워드는 멀티스레딩 환경에서 공유 데이터에 대한 동시 접근을 제어하기 위한 메커니즘을 제공합니다. 멀티스레딩 환경에서는 여러 스레드가 동시에 실행되므로 공유 데이터에 대한 동시 업데이트로 인한 문제를 방지하기 위해 동기화가 필요합니다.

`synchronized` 키워드를 사용하면 특정 메서드 블록이나 메서드 전체를 하나의 스레드만 실행할 수 있도록 제한할 수 있습니다. 이를 통해 한 번에 하나의 스레드만이 공유 데이터에 접근하여 데이터의 일관성을 유지할 수 있습니다.

아래는 `synchronized`의 사용법과 예시에 대한 설명입니다.

 


1. **메서드 동기화:**

  
   public class SynchronizedExample {
       private int sharedData = 0;

       // synchronized 키워드를 사용하여 메서드 동기화
       public synchronized void updateData() {
           // 공유 데이터를 업데이트하는 코드
           sharedData++;
           System.out.println("Updated data: " + sharedData);
       }
   }


   위의 예제에서 `updateData` 메서드는 `synchronized` 키워드로 동기화되어 있습니다. 이로 인해 하나의 스레드만이 `updateData` 메서드를 실행할 수 있습니다. 다른 스레드가 접근하려고 하면 대기해야 합니다.

 

 

반응형


2. **블록 동기화:**

  
   public class SynchronizedExample {
       private static final Object lock = new Object();
       private int sharedData = 0;

       public void updateData() {
           // 일부 코드는 동기화하지 않음

           synchronized (lock) {
               // 동기화된 블록 내에서 공유 데이터를 업데이트하는 코드
               sharedData++;
               System.out.println("Updated data: " + sharedData);
           }

           // 일부 코드는 동기화하지 않음
       }
   }


   위의 예제에서는 메서드 전체가 아닌 특정 블록만 `synchronized`로 동기화되어 있습니다. `synchronized` 블록은 특정 객체나 클래스를 사용하여 동기화됩니다. 여기서는 `lock` 객체를 사용하고 있습니다.

 

 

 

 


3. **정적 메서드 동기화:**


   public class SynchronizedExample {
       private static int sharedData = 0;

       // 정적 메서드 동기화
       public static synchronized void updateData() {
           // 공유 데이터를 업데이트하는 코드
           sharedData++;
           System.out.println("Updated data: " + sharedData);
       }
   }


   정적 메서드에 `synchronized` 키워드를 사용하면 해당 클래스의 모든 인스턴스가 아닌 클래스 자체에 대한 동기화가 이루어집니다.

`synchronized`를 사용하면 멀티스레딩 환경에서의 데이터 일관성과 안전성을 보장할 수 있지만, 과도한 동기화는 성능 저하를 일으킬 수 있으므로 신중하게 사용해야 합니다. 또한 Java 5부터는 `java.util.concurrent` 패키지를 통해 더 유연하고 효율적인 동시성 제어 방법을 제공하고 있으므로, 상황에 따라 적절한 방법을 선택하는 것이 중요합니다.

반응형