Java Volatile์ด๋?
volatilekeyword๋ Java ๋ณ์๋ฅผ Main Memory์ ์ ์ฅํ๊ฒ ๋ค๋ผ๋ ๊ฒ์ ๋ช ์ํ๋ ๊ฒ์ ๋๋ค.- ๋งค๋ฒ ๋ณ์์ ๊ฐ์ Readํ ๋๋ง๋ค CPU cache์ ์ ์ฅ๋ ๊ฐ์ด ์๋ Main Memory์์ ์ฝ๋ ๊ฒ์ ๋๋ค.
- ๋ํ ๋ณ์์ ๊ฐ์ Writeํ ๋๋ง๋ค Main Memory์ ๊น์ง ์์ฑํ๋ ๊ฒ์ ๋๋ค.
์(Why) ํ์ํ ๊น์?

volatile๋ณ์๋ฅผ ์ฌ์ฉํ๊ณ ์์ง ์๋ MultiThread ์ดํ๋ฆฌ์ผ์ด์ ์์๋ Task๋ฅผ ์ํํ๋ ๋์์ฑ๋ฅ ํฅ์์ ์ํด Main Memory์์ ์ฝ์ ๋ณ์ ๊ฐ์ CPU Cache์ ์ ์ฅํ๊ฒ ๋ฉ๋๋ค.- ๋ง์ฝ์ Multi Threadํ๊ฒฝ์์
Thread๊ฐ ๋ณ์ ๊ฐ์ ์ฝ์ด์ฌ ๋๊ฐ๊ฐ์ CPU Cache์ ์ ์ฅ๋ ๊ฐ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์๋ณ์ ๊ฐ ๋ถ์ผ์น ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
Example
- SharedObject๋ฅผ ๊ณต์ ํ๋ ๋ ๊ฐ์ Thread๊ฐ ์์ต๋๋ค.
- Thread-1๋ counter ๊ฐ์ ๋ํ๊ณ ์ฝ๋ ์ฐ์ฐ์ ํฉ๋๋ค. (Read & Write)
- Thread-2๋ counter ๊ฐ์ ์ฝ๊ธฐ๋ง ํฉ๋๋ค.(Only Read)
public class SharedObject {
public int counter = 0;
}Thread-1์ counter๊ฐ์ ์ฆ๊ฐ์ํค๊ณ ์์ง๋ง CPU Cache์๋ง ๋ฐ์๋์ด์๊ณ ์ค์ ๋ก Main Memory์๋ ๋ฐ์์ด ๋์ง ์์์ต๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Thread-2๋ count๊ฐ์ ๊ณ์ ์ฝ์ด์ค์ง๋ง 0์ ๊ฐ์ ธ์ค๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.

์ด๋ป๊ฒ(How) ํด๊ฒฐํ ๊น์?
volatileํค์๋๋ฅผ ์ถ๊ฐํ๊ฒ ๋๋ฉด Main Memory์ ์ ์ฅํ๊ณ ์ฝ์ด์ค๊ธฐ ๋๋ฌธ์๋ณ์ ๊ฐ ๋ถ์ผ์น ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ ์ ์์ต๋๋ค.
public class SharedObject {
public volatile int counter = 0;
}์ธ์ (When) Volatile์ด ์ ํฉํ ๊น์?
- Multi Thread ํ๊ฒฝ์์ ํ๋์ Thread๋ง read & writeํ๊ณ ๋๋จธ์ง Thread๊ฐ readํ๋ ์ํฉ์์
๊ฐ์ฅ ์ต์ ์ ๊ฐ์ ๋ณด์ฅํฉ๋๋ค.
ํญ์ Volatile์ด ์ณ์๊น์?
Example
- Thread-1์ด ๊ฐ์ ์ฝ์ด 1์ ์ถ๊ฐํ๋ ์ฐ์ฐ์ ์งํํฉ๋๋ค.
- ์ถ๊ฐํ๋ ์ฐ์ฐ์ ํ์ง๋ง ์์ง Main Memory์ ๋ฐ์๋๊ธฐ ์ ์ํฉ์ ๋๋ค.
- Thread-2์ด ๊ฐ์ ์ฝ์ด 1์ ์ถ๊ฐํ๋ ์ฐ์ฐ์ ์งํํฉ๋๋ค.
- ์ถ๊ฐํ๋ ์ฐ์ฐ์ ํ์ง๋ง ์์ง Main Memory์ ๋ฐ์๋๊ธฐ ์ ์ํฉ์ ๋๋ค.
- ๋ ๊ฐ์ Thread๊ฐ 1์ ์ถ๊ฐํ๋ ์ฐ์ฐ์ ํ์ฌ ์ต์ข
๊ฒฐ๊ณผ๊ฐ 2๊ฐ ๋์ด์ผ ํ๋ ์ํฉ์ด์ง๋ง?
- ๊ฐ๊ฐ ๊ฒฐ๊ณผ๋ฅผ Main Memory์ ๋ฐ์ํ๊ฒ ๋๋ค๋ฉด 1๋ง ๋จ๋ ์ํฉ์ด ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.

- ํ๋์ Thread๊ฐ ์๋ ์ฌ๋ฌ Thread๊ฐ writeํ๋ ์ํฉ์์๋ ์ ํฉํ์ง ์์ต๋๋ค.
- ์ฌ๋ฌ Thread๊ฐ writeํ๋ ์ํฉ์ด๋ผ๋ฉด?
synchronized๋ฅผ ํตํด ๋ณ์ read & write์ ์์์ฑ(atomic)์ ๋ณด์ฅํด์ผ ํฉ๋๋ค.
Volatile ์ฑ๋ฅ์ ์ด๋ค ์ํฅ์ด ์์๊น์?
volatile๋ ๋ณ์์ read์ write๋ฅผ Main Memory์์ ์งํํ๊ฒ ๋ฉ๋๋ค.CPU Cache๋ณด๋คMain Memory๊ฐ ๋น์ฉ์ด ๋ ํฌ๊ธฐ ๋๋ฌธ์๋ณ์ ๊ฐ ์ผ์น์ ๋ณด์ฅํด์ผ ํ๋ ๊ฒฝ์ฐ์๋งvolatile์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ ๋ฆฌํ์๋ฉด?
volatile- Main Memory์ read & write๋ฅผ ๋ณด์ฅํ๋ ํค์๋.
- ์ํฉ?
- ํ๋์ Thread๊ฐ writeํ๊ณ ๋๋จธ์ง Thread๊ฐ ์ฝ๋ ์ํฉ์ธ ๊ฒฝ์ฐ.
- ๋ณ์์ ๊ฐ์ด ์ต์ ์ ๊ฐ์ผ๋ก ์ฝ์ด์์ผ ํ๋ ๊ฒฝ์ฐ.
- ์ฃผ์ํ ์ ?
- ์ฑ๋ฅ์ ์ํฅ์ด ์ด๋ ์ ๋ ์ํฅ์ ์ค ์ ์๋ Point๋ผ๋ ์ .