Java Volatile์ด๋?
volatile
keyword๋ 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๋ผ๋ ์ .