Bepoz
파즈의 공부 일기
Bepoz
전체 방문자
오늘
어제
  • 분류 전체보기 (232)
    • 공부 기록들 (85)
      • 우테코 (17)
    • Spring (85)
    • Java (43)
    • Infra (17)
    • 책 정리 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Bepoz

파즈의 공부 일기

자바에서 volatile 이란?
Java

자바에서 volatile 이란?

2020. 9. 4. 01:01

volatile 키워드를 변수앞에 쓴다는 것은 변수를 읽어들이거나 받아들일 때에

main memory에서 읽어들이고 main memory에 저장하겠다는 뜻을 갖는다.

 

 

다음과 같은 멀티 스레드 상황에서 

CPU1이 Main Memory에 있는 value 값을 가져와서 +1씩 시키고 있을 때에

CPU2가 Main Memory에서 뒤늦게 value 값을 가져와서 사용할 때에 서로의 변수 값이 다르기에 오류가 발생할 수 있다.

 

이 때에 volatile 키워드를 사용해서 변수 앞에 붙여주면 위의 변수 값이 일치하지 않아서 생기는 오류를 해결할 수 있다.

 

하지만 언제나 적절한 것은 아니다. 흔한 멀티스레딩 문제의 오류가 날 수 있기 때문이다.

 

만약 CPU1이 Main Memory에서 부터 0의 값을 가진 count 변수를 가져와 +1를 해주고 write를 해주기 전에

CPU2가 count 변수를 가져와 +1를 해주고 write을 하려는 상황에서 기댓값은 2이지만 1이 write 될 것이다.

 

그렇기 때문에 이런 여러 스레드가 write 하게 되는 상황에서는 synchronized 키워드를 이용해 꼭 동기화 해주어야 한다.

 

Main Memory가 Cache Memory보다 비용값이 크기 때문에 위의 상황과 같은 변수 값 일치를 기대해야 할 때에만

volatile를 사용하는 것이 좋다.

'Java' 카테고리의 다른 글

Java 다익스트라 알고리즘(Dijkstra Algorithm)에 대해  (0) 2020.09.08
Java 프림 알고리즘(Prim Algorithm)과 크루스칼 알고리즘(Kruskal Algorithm)에 대해  (0) 2020.09.07
위상정렬 자바로 구현하기, 백준2252_줄 세우기  (0) 2020.08.31
Java Trie(트라이)란  (0) 2020.08.27
Java HashMap 메서드 computeIfAbsent  (0) 2020.08.27
    'Java' 카테고리의 다른 글
    • Java 다익스트라 알고리즘(Dijkstra Algorithm)에 대해
    • Java 프림 알고리즘(Prim Algorithm)과 크루스칼 알고리즘(Kruskal Algorithm)에 대해
    • 위상정렬 자바로 구현하기, 백준2252_줄 세우기
    • Java Trie(트라이)란
    Bepoz
    Bepoz
    https://github.com/Be-poz/TIL

    티스토리툴바