팁/자바
자바 멀티스레딩 - CAS 연산
wcwdfu
2025. 7. 24. 22:49
1) 자바 멀티스레딩 - CAS ( compare and set/swap) 락없이 안정한 동시성 제어
먼저보는 결론 ::
cas를 통환 동시성 제어는 숫자 값의 증가, 자료 구조의 데이터 추가와 같이 cpu 사이클이 금방 끝나는 연산에 사용해야한다. db 결과를 대기하거나 다른 서버의 응답을 기다리는 등 오래 기다리는 작업에서는 적합하지 못하다.
AtomicInteger counter = new AtomicInteger(0);
// 현재 값이 0이면 1로 변경
counter.compareAndSet(0, 1);
cas는 동기화 락과 달리 스레드를 Runnable상태를 유지하면서 스레드간 충돌 없이 안전하게 동작한다
장점 : 락 없이 안전한 동시성 제어가 가능하며 waiting, blocking등의 상태 변경이 없어 context switching 비용이 발생하지 않아 가볍고 빠르게 작동이 가능하다.
단점 : runnable 상태를 유지하고 내부적으로 cpu자원을 계속 사용한다. (spin lock)