팁/자바

자바 멀티스레딩 - 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)