본문 바로가기
JAVA

Concurrency Issue

by orioncsy 2023. 3. 24.

Concurrency Issue

개념

동시성 이슈

  • 멀티 스레드 환경에서 공유 자원에 대한 접근으로 인해 발생하는 문제

해결 방법

Synchronized

  • synchronized 키워드가 붙은 메서드에는 하나의 스레드만 접근 가능
  • 모든 공유 자원 가능성이 있는 영역에 synchronized 하는 것은 비현실적이고 성능도 저하된다.

Atomic, Concurrent

  • java.util.concurrent.*의 대표적인 클래스로 atomic과 concurrent가 존재
  • volatile을 통해 메인 메모리에 있는 값을 바로 가져올 수 있다.
    • jvm에서는 cpu 메모리 영역에 데이터를 캐싱하는 값을 가져오는데 volatile을 사용하면 메인 메모리에서 바로 값을 가져와 최신의 데이터를 확인할 수 있다.
  • CAS(Compare And Sweap) 알고리즘 사용
    • volatile 키워드를 사용하여 스레드에 저장된 값과 메인 메모리에 저장된 값을 비교
    • 일치하면 공유 자원에 접근하여 데이터를 변경
    • 일치하지 않으면 실패로 처리하고 재시도

Reference

https://devwithpug.github.io/java/java-thread-safe/

'JAVA' 카테고리의 다른 글

Java Type  (0) 2023.03.26
Mutable & Immutable  (0) 2023.03.25
Throwable  (0) 2023.03.23
Static  (0) 2023.03.22
First Class Collection  (0) 2023.03.21