- volatile 키워드는 오직 한개의 쓰레드에서 쓰기 작업을 할때, 그리고 다른 쓰레드는 읽기작업만을 할 때 안정성을 보장
- 하지만 AtomicInteger는 여러 쓰레드에서 읽기/쓰기작업을 병행합니다.
- 그래서 CAS 알고리즘을 사용하여 2중 안전을 기하는 방법을 사용합니다.
- 여러 스레드가 잠금을 얻으려고 시도하면 그 중 하나가 승리하고 나머지 스레드는 차단되거나 일시 중단됨
- 스레드를 일시 중단했다가 다시 시작하는 프로세스는 비용이 많이 들고 시스템의 전반적인 효율성에 영향을 줌
- 카운터와 같은 작은 프로그램에서는 컨텍스트 전환에 소요되는 시간이 실제 코드 실행보다 훨씬 길어 전체 효율성 크게 떨어짐
- 여러 스레드가 CAS알고리즘을 통해 동일한 값을 업데이트하려고 하면 그 중 하나가 승리하고 값을 업데이트합니다.
- 그러나 잠금의 경우와 달리 다른 스레드는 일시 중단되지 않습니다.
- 대신, 그들은 단순히 값을 업데이트하지 않았다는 알림을받습니다.
- 컨텍스트 전환이 완전히 방지되어 동기화 블록을 사용하여 성능을 낮추지 않아도 된다.
'자바' 카테고리의 다른 글
자바 Stream (바이트기반스트림/문자열기반스트림), IO 입출력 (0) | 2021.07.02 |
---|---|
자바 객체의 생성과정(라이플 사이클) / Strong Reference & Weak Reference / 객체와 메모리 (0) | 2021.06.25 |
Java Singleton 의 7가지 패턴 (0) | 2021.05.17 |
자바 '변수' - 변수 별 차이 및 메모리 내 저장 위치 / static에 대한 심화 학습 (0) | 2021.04.29 |
From Java 8 to Java 15 in Ten Minutes (0) | 2021.01.27 |