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)
'팁 > 자바' 카테고리의 다른 글
| long to Double 의 정밀도손실 (0) | 2025.06.03 |
|---|---|
| 공용 풀 사용은 CPU바운드 작업에만 적합하다. (0) | 2025.06.01 |
| Optional 중 즉시평가, 지연평가 (1) | 2025.05.28 |