티스토리 뷰

Java

[Java] Java volatile?

hoony__93 2020. 11. 10. 14:26
728x90
반응형

* Java volatile?

 - volatile 변수는 변수의 값을 읽어올때 CPU Cache에서 읽어오는 것이 아니라, Main Memory에서 읽어오게 된다.

 - write 할때마다 변수의 값을 Main Memory에 저장한다.

 

* 어떨때 쓸까?

- Multi Thread 환경에서 Thread가 변수값을 읽어올때 각각의 CPU cache값이 다르기 때문에 변수 값이 불일치하는 문제가 발생한다.

- Thread 1에서 int counter 값을 0에서 계속 증가시키고 있다고 치면, 아직 CPU cache에만 값이 저장되고 있기 때문에 Thread 2에서 counter을 읽어들이면 0을 가져오게 된다.

 

* 언제 쓸까?

- 하나의 Thread에서만 값을 read & write하고 나머지 Thread는 read만 하는상황에서  사용한다.

 

* 주의할 점

- 하나의 Thread에서 write할 때만 사용하는 것이 옳다. 왜냐하면 여러 Thread에서 값을 read & write할때 어떤 쓰레드에서 write한 값이 저장되는지 불명확하기 때문이다.

- 여러 Thread에서 값을 read & write할 때synchronized를 사용하여 변수의 원자성(atomic)을 보장한다.

 

 

728x90
반응형
250x250
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함