Java

synchronize 라는 키워드를 함수에 사용하면 어떻게 동작해야 하나요?

개발만파볼까 2023. 12. 27. 00:34
728x90
반응형
SMALL

'synchronize' 키워드가 함수에 적용될 때의 동작 방식은 다음과 같습니다:

  1. Mutual Exclusion (상호 배제): 'synchronize' 키워드가 적용된 함수나 블록은 한 시점에 하나의 스레드만 실행할 수 있습니다. 즉, 한 스레드가 'synchronized' 함수를 실행하고 있는 동안, 다른 스레드들은 해당 함수 또는 블록에 접근할 수 없습니다.
  2. Locks on Objects: Java에서 'synchronize' 키워드는 객체에 락을 걸게 됩니다. 메소드가 'synchronized'로 선언되면, 해당 메소드를 호출하는 객체는 락을 획득합니다. 이는 객체 레벨에서 동기화를 제공합니다. 만약 'synchronized' 블록이 사용된다면, 특정 객체에 대한 락을 지정할 수 있습니다.
  3. Memory Visibility: 'synchronize' 키워드는 메모리 가시성도 보장합니다. 즉, 한 스레드가 수정한 변수의 값을 다른 스레드가 보게 되는 것을 보장합니다. 이는 캐시된 변수 값에 의존하지 않고 메인 메모리에서 최신 값을 읽어오는 것을 의미합니다.

이러한 동작은 멀티스레딩 환경에서 경쟁 조건(race conditions)과 데이터 불일치를 방지하는데 매우 중요합니다. 그러나, 'synchronized' 키워드의 사용은 성능 저하를 초래할 수도 있으므로, 필요한 경우에만 신중하게 사용해야 합니다."

728x90
반응형
LIST