• volatile 키워드는 오직 한개의 쓰레드에서 쓰기 작업을 할때, 그리고 다른 쓰레드는 읽기작업만을 할 때 안정성을 보장
  • 하지만 AtomicInteger는 여러 쓰레드에서 읽기/쓰기작업을 병행합니다.
  • 그래서 CAS 알고리즘을 사용하여 2중 안전을 기하는 방법을 사용합니다.

  • 여러 스레드가 잠금을 얻으려고 시도하면 그 중 하나가 승리하고 나머지 스레드는 차단되거나 일시 중단됨
  • 스레드를 일시 중단했다가 다시 시작하는 프로세스는 비용이 많이 들고 시스템의 전반적인 효율성에 영향을 줌
  • 카운터와 같은 작은 프로그램에서는 컨텍스트 전환에 소요되는 시간이 실제 코드 실행보다 훨씬 길어 전체 효율성 크게 떨어짐
  • 여러 스레드가 CAS알고리즘을 통해 동일한 값을 업데이트하려고 하면 그 중 하나가 승리하고 값을 업데이트합니다.
    • 그러나 잠금의 경우와 달리 다른 스레드는 일시 중단되지 않습니다.
    • 대신, 그들은 단순히 값을 업데이트하지 않았다는 알림을받습니다.
  •  컨텍스트 전환이 완전히 방지되어 동기화 블록을 사용하여 성능을 낮추지 않아도 된다.

+ Recent posts