[꼼꼼한 개발자] 꼼코더
[JAVA] - 동기화와 원자적 연산이란?(차이점) 간단하고 쉽게 이해하기 본문
반응형
나는 문득 이런 생각이 들었다
"동기화는 '충돌방지' 원자적 연산도 '충돌방지' 그럼 동기화 == 원자적 연산 같은 말 아니야?"
그래서 나름 찾아보고 글을 적어본다!
♻️ 동기화
멀티스레드 환경에서 여러 스레드가 공유하는 데이터를 안전하게 접근하고 조작하기 위해 사용하는 기술.
동기화는 공유 데이터에 접근하는 스레드들이 서로 충돌하지 않도록 해주는 역할을 한다.
⚛️ 원자적 연산
한번에 실행되거나 실행되지 않는 연산을 의미.
원자적 연산은 연산이 실행되는 도중에 다른 스레드에 의해 방해받지 않는 것이 보장되어야 하며
실행결과도 항상 일관성이 있어야 한다.
👀차이점
동기화와 원자적 연산은 비슷한 개념이지만, 같은 의미는 아니다.
예를 들어, "i++" 연산은 하나의 단위 연산이 아니므로( 현재 i의 값을 읽어온다 > i에 1을 더한다)
여러 스레드가 "i++"를 동시에 실행하면 결과가 일관성 없이 나올 수 있다.
따라서, "i++"와 같은 연산이 원자적으로 실행되도록 보장하기 위해 AtomicInteger와 같은 원자적 자료형을 사용한다.
🎬 마무리
동기화와 원자적 연산은 서로 비슷한 개념이지만, 차이점이 존재한다
- 동기화 : 여러 스레드 간의 공유 데이터 접근을 보호하기 위해 사용.
- 원자적 연산 : 하나의 연산이 원자적으로 실행되도록 보장하기 위해 사용.
'간단하고 쉽게 > JAVA' 카테고리의 다른 글
[JAVA] - Optional 반환값 사용이유? 간단하고 쉽게 이해하기 (0) | 2023.04.19 |
---|---|
[JAVA] - 동기와 비동기란?(동기와 비동기의 차이점) 간단하고 쉽게 이해하기 (0) | 2023.04.15 |
[JAVA] - 자바 컬렉션(Collection)이란? 간단하고 쉽게 이해하기 (0) | 2023.03.21 |
[JAVA] - JPA란? 간단하고 쉽게 이해하기(예제코드 완벽정리) (1) | 2023.03.21 |
[JAVA] - MyBatis란?, 마이바티스란?(예제코드) 간단하고 쉽게 이해하기 (0) | 2023.03.20 |
Comments