์๋
! ์ฐ๋ฆฌ๋ ๋ฉํฐ์ค๋ ๋ฉ์ ๋ํ ์ฐ๊ตฌ๋ฅผ ๊ณ์ํฉ๋๋ค.
์ค๋ ๋์์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด
volatile
์ค๋์ ํค์๋์ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค yield()
. ๋ค์ด๋นํ์ :)
ํ๋ฐ์ฑ ํค์๋
๋ค์ค ์ค๋ ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ง๋ค ๋ ๋ ๊ฐ์ง ์ฌ๊ฐํ ๋ฌธ์ ์ ์ง๋ฉดํ ์ ์์ต๋๋ค. ์ฒซ์งธ, ๋ค์ค ์ค๋ ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์คํ ์ค์ผ ๋ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋ณ์ ๊ฐ์ ์บ์ํ ์ ์์ต๋๋ค ( 'ํ๋ฐ์ฑ ์ฌ์ฉ'์ด๋ผ๋ ๊ฐ์ ์์ ์ด๋ฏธ ์ด์ ๋ํด ์ด์ผ๊ธฐํ์ต๋๋ค ). ํ๋์ ์ค๋ ๋๊ฐ ๋ณ์์ ๊ฐ์ ๋ณ๊ฒฝํ์ง๋ง ๋ ๋ฒ์งธ ์ค๋ ๋๋ ๋ณ์์ ์บ์๋ ๋ณต์ฌ๋ณธ์ผ๋ก ์์ ํ๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ณผ ์ ์๋ ์ํฉ์ด ์์ ์ ์์ต๋๋ค . ๋น์ฐํ ๊ทธ ๊ฒฐ๊ณผ๋ ์ฌ๊ฐํ ์ ์์ต๋๋ค. ์ค๋๋ ๋ณ์๊ฐ ์๋๋ผ ์ํ ๊ณ์ข ์์ก์ด ๊ฐ์๊ธฐ ๋ฌด์์๋ก ์์๋๋ก ๋ฐ๊ธฐ ์์ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ฌ๋ฏธ์์ ๊ฒ ๊ฐ์ง ์์ฃ ? ๋์งธ, Java์์ ๋ชจ๋ ๊ธฐ๋ณธ ์ ํ์ ์ฝ๊ณ ์ฐ๋ ์์ ,long
double
, ์์์
๋๋ค. ์๋ฅผ ๋ค์ด, ํ ์ค๋ ๋์์ ๋ณ์ ๊ฐ์ ๋ณ๊ฒฝ int
ํ๊ณ ๋ค๋ฅธ ์ค๋ ๋์์ ๋ณ์ ๊ฐ์ ์ฝ์ผ๋ฉด ์ด์ ๊ฐ ๋๋ ์ ๊ฐ, ์ฆ ๋ณ๊ฒฝ ๊ฒฐ๊ณผ ๊ฐ์ ์ป๊ฒ ๋ฉ๋๋ค. ์ค๋ ๋ 1์์. '์ค๊ฐ ๊ฐ'์ด ์์ต๋๋ค. long
๊ทธ๋ฌ๋ ์ด๊ฒ์ s์ double
s ์์๋ ์๋ํ์ง ์์ต๋๋ค . ์? ํฌ๋ก์ค ํ๋ซํผ ์ง์ ๋๋ฌธ์
๋๋ค. ์์ ๋จ๊ณ์์ Java์ ๊ธฐ๋ณธ ์์น์ด 'ํ ๋ฒ ์์ฑํ๊ณ ์ด๋์๋ ์คํ'์ด๋ผ๊ณ ๋งํ๋ ๊ฒ์ ๊ธฐ์ตํ์ญ๋๊น? ์ด๋ ํฌ๋ก์ค ํ๋ซํผ ์ง์์ ์๋ฏธํฉ๋๋ค. ์ฆ, Java ์ ํ๋ฆฌ์ผ์ด์
์ ๋ชจ๋ ์ข
๋ฅ์ ๋ค์ํ ํ๋ซํผ์์ ์คํ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด Windows ์ด์ ์ฒด์ ์์ ๋ค๋ฅธ ๋ฒ์ ์ Linux ๋๋ MacOS๊ฐ ์์ต๋๋ค. ๊ทธ๊ฒ์ ๊ทธ๋ค ๋ชจ๋์ ์ฅ์ ์์ด ์คํ๋ฉ๋๋ค. 64๋นํธ๋ก ๊ณ์ฐํ๋ฉด,long
double
Java์์ '๊ฐ์ฅ ๋ฌด๊ฑฐ์ด' ํ๋ฆฌ๋ฏธํฐ๋ธ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ํน์ 32๋นํธ ํ๋ซํผ์ 64๋นํธ ๋ณ์์ ์์์ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ๋ฅผ ๊ตฌํํ์ง ์์ต๋๋ค. ์ด๋ฌํ ๋ณ์๋ ๋ ๊ฐ์ง ์์
์ผ๋ก ์ฝ๊ณ ์๋๋ค. ๋จผ์ ์ฒ์ 32๋นํธ๊ฐ ๋ณ์์ ๊ธฐ๋ก๋ ๋ค์ ๋ค๋ฅธ 32๋นํธ๊ฐ ๊ธฐ๋ก๋ฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ํ ์ค๋ ๋๋ ๋ณ์์ ์ผ๋ถ 64๋นํธ ๊ฐ์ ๊ธฐ๋ก X
ํ๊ณ ๋ ์์
์ผ๋ก ์ํํฉ๋๋ค. ๋์์, ๋ ๋ฒ์งธ ์ค๋ ๋๋ ๋ณ์์ ๊ฐ์ ์ฝ์ผ๋ ค๊ณ ์๋ํ๊ณ ๋ ์์
์ฌ์ด์ ์ฝ๊ธฐ๋ฅผ ์๋ํฉ๋๋ค. ์ฆ, ์ฒซ ๋ฒ์งธ 32๋นํธ๋ ์์ฑ๋์์ง๋ง ๋ ๋ฒ์งธ 32๋นํธ๋ ์์ฑ๋์ง ์์ ๊ฒฝ์ฐ์
๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์๋ชป๋ ์ค๊ฐ ๊ฐ์ ์ฝ๊ณ ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๊ทธ๋ฌํ ํ๋ซํผ์์ ์ซ์๋ฅผ 9223372036854775809 ์ ์ฐ๋ ค๊ณ ํ๋ฉด ๋ณ์์ 64๋นํธ๋ฅผ ์ฐจ์งํฉ๋๋ค. ์ด์ง ํ์์ผ๋ก ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค. 1000000000000000000000000000000000000000000000000000000000000001 ์ฒซ ๋ฒ์งธ ์ค๋ ๋๊ฐ ๋ณ์์ ์ซ์๋ฅผ ์ฐ๊ธฐ ์์ํฉ๋๋ค. ์ฒ์์๋ ์ฒ์ 32๋นํธ (1000000000000000000000000000000) ๋ฅผ ์ฐ๊ณ ๋ ๋ฒ์งธ 32๋นํธ (0000000000000000000000000000001) ๋ฅผ ์๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ๋ฒ์งธ ์ค๋ ๋๋ ์ด๋ฏธ ์์ฑ๋ ์ฒ์ 32๋นํธ์ธ ๋ณ์์ ์ค๊ฐ ๊ฐ(10000000000000000000000000000000)์ ์ฝ์ผ๋ฉด์ ์ด๋ฌํ ์์
์ฌ์ด์ ๋ผ์ด๋ค ์ ์์ต๋๋ค. ์ญ์ง๋ฒ์์ ์ด ์ซ์๋ 2,147,483,648์
๋๋ค. ์ฆ, ์ซ์ 9223372036854775809๋ฅผ ๋ณ์์ ์ฐ๊ณ ์ถ์์ง๋ง ์ด ์์
์ด ์ผ๋ถ ํ๋ซํผ์์ ์์์ ์ด์ง ์๊ธฐ ๋๋ฌธ์ ๊ฐ์๊ธฐ ๋์จ ์ฌ์
ํ ์ซ์ 2,147,483,648์ด ์๊ณ ์ ์ ์๋ ํจ๊ณผ๊ฐ ์์ต๋๋ค. ํ๋ก๊ทธ๋จ. ๋ ๋ฒ์งธ ์ค๋ ๋๋ ์ฐ๊ธฐ๊ฐ ์๋ฃ๋๊ธฐ ์ ์ ๋จ์ํ ๋ณ์ ๊ฐ์ ์ฝ์ต๋๋ค. ์ฆ, ์ค๋ ๋๋ ์ฒซ ๋ฒ์งธ 32๋นํธ๋ฅผ ๋ณด์์ง๋ง ๋ ๋ฒ์งธ 32๋นํธ๋ ๋ณด์ง ์์์ต๋๋ค. ๋ฌผ๋ก ์ด๋ฌํ ๋ฌธ์ ๋ ์ด์ ๋ฐ์ํ ๊ฒ์ด ์๋๋๋ค. Java๋ ๋จ์ผ ํค์๋๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค volatile
. ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ๊ฒฝ์ฐvolatile
ํ๋ก๊ทธ๋จ์์ ์ผ๋ถ ๋ณ์๋ฅผ ์ ์ธํ ๋ ํค์๋โฆ
public class Main {
public volatile long x = 2222222222222222222L;
public static void main(String[] args) {
}
}
...๊ทธ๊ฒ์ ๋ค์์ ์๋ฏธํฉ๋๋ค:
- ํญ์ ์์์ ์ผ๋ก ์ฝ๊ณ ์๋๋ค. 64
double
๋นํธ๋long
. - Java ์์คํ ์ ์ด๋ฅผ ์บ์ํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ 10๊ฐ์ ์ค๋ ๋๊ฐ ์์ฒด ๋ก์ปฌ ๋ณต์ฌ๋ณธ์ผ๋ก ์์ ํ๋ ์ํฉ์ด ๋ฐ์ํ์ง ์์ต๋๋ค.
yield() ๋ฉ์๋
์ฐ๋ฆฌ๋ ์ด๋ฏธ ํด๋์ค์ ๋ง์Thread
๋ฉ์๋๋ฅผ ๊ฒํ ํ์ง๋ง ์ฒ์ ์๊ฒ ๋ ์ค์ํ ๋ฉ์๋๊ฐ ์์ต๋๋ค. yield()
๋ฐฉ๋ฒ ์
๋๋ค . ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ๊ทธ ์ด๋ฆ์ด ์๋ฏธํ๋ ๋ฐ๋ฅผ ์ ํํ ์ํํฉ๋๋ค! 
yield
์ค์ ๋ก ๋ค๋ฅธ ์ค๋ ๋์ '์๋
ํ์ธ์. ๋๋ ํน๋ณํ ์๋๋ฅด์ง ์๊ณ ์์ผ๋ฏ๋ก ํ๋ก์ธ์ ์๊ฐ์ ํ๋ณดํ๋ ๊ฒ์ด ์ค์ํ ์ฌ๋์ด๋ผ๋ฉด ๊ฐ์ ธ๊ฐ์ญ์์ค. ๊ธฐ๋ค๋ฆด ์ ์์ต๋๋ค.' ์ด๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง์ ๋ํ ๊ฐ๋จํ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
public class ThreadExample extends Thread {
public ThreadExample() {
this.start();
}
public void run() {
System.out.println(Thread.currentThread().getName() + " yields its place to others");
Thread.yield();
System.out.println(Thread.currentThread().getName() + " has finished executing.");
}
public static void main(String[] args) {
new ThreadExample();
new ThreadExample();
new ThreadExample();
}
}
Thread-0
, Thread-1
, ์ ์ธ ๊ฐ์ง ์ค๋ ๋๋ฅผ ์์ฐจ์ ์ผ๋ก ์์ฑํ๊ณ ์์ํฉ๋๋ค Thread-2
. Thread-0
๋จผ์ ์์ํ๊ณ ์ฆ์ ๋ค๋ฅธ ์ฌ๋์๊ฒ ์๋ณดํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ Thread-1
์์๋๊ณ ๋ํ ์๋ณดํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ Thread-2
์์๋๊ณ ๊ฒฐ๊ณผ๋ ์์ฑ๋ฉ๋๋ค. ๋ ์ด์ ์ค๋ ๋๊ฐ ์์ผ๋ฉฐ Thread-2
๋ง์ง๋ง์ผ๋ก ์๋ฆฌ๋ฅผ ์๋ณดํ ํ ์ค๋ ๋ ์ค์ผ์ค๋ฌ๊ฐ '์, ๋ ์ด์ ์ ์ค๋ ๋๊ฐ ์์ต๋๋ค. ๋๊ธฐ์ด์ ๋๊ฐ ์์ต๋๊น? ๋๊ฐ ์ด์ ์ ๊ทธ ์๋ฆฌ๋ฅผ ์๋ณดํ์ต๋๊น Thread-2
? ๊ทธ๋ฌ๋ ๊ฒ ๊ฐ์ต๋๋ค Thread-1
. ์ข์, ๊ทธ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ์คํํ์๋ ๊ฒ์ ์๋ฏธํ๋ค'. Thread-1
์์
์ ์๋ฃํ๋ฉด ์ค๋ ๋ ์ค์ผ์ค๋ฌ๊ฐ ์กฐ์ ์ ๊ณ์ํฉ๋๋ค. '์ข์์, Thread-1
๋๋ฌ์ต๋๋ค. ๋๊ธฐ์ด์ ๋ค๋ฅธ ์ฌ๋์ด ์์ต๋๊น?'. Thread-0์ด ๋๊ธฐ์ด์ ์์ต๋๋ค. ์ง์ ์ ์๋ฆฌ๋ฅผ ์๋ณดํ์ต๋๋ค.Thread-1
. ์ด์ ์ฐจ๋ก๊ฐ ๋์ด ์๋ฃ๋ ๋๊น์ง ์คํ๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ค์ผ์ค๋ฌ๋ ์ค๋ ๋ ์กฐ์ ์ ์๋ฃํฉ๋๋ค. '์ข์, Thread-2
๋ค๋ฅธ ์ค๋ ๋์ ์๋ณดํ๊ณ ์ด์ ๋ชจ๋ ์๋ฃ๋์์ต๋๋ค. ๋น์ ์ด ๋ง์ง๋ง์ผ๋ก ์๋ณดํ์ผ๋ฏ๋ก ์ด์ ๋น์ ์ฐจ๋ก์
๋๋ค.' ๊ทธ๋ฐ ๋ค์ Thread-2
์๋ฃ๋ ๋๊น์ง ์คํํฉ๋๋ค. ์ฝ์ ์ถ๋ ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. Thread-0์ ๋ค๋ฅธ ์ฌ๋์๊ฒ ์๋ฆฌ๋ฅผ ์๋ณดํฉ๋๋ค. Thread-1์ ๋ค๋ฅธ ์ฌ๋์๊ฒ ์๋ฆฌ๋ฅผ ์๋ณดํฉ๋๋ค. Thread-2๋ ๋ค๋ฅธ ์ฌ๋์๊ฒ ์๋ฆฌ๋ฅผ ์๋ณดํฉ๋๋ค. Thread-0์ด ์คํ์ ๋ง์ณค์ต๋๋ค. ์ค๋ ๋-2๊ฐ ์คํ์ ๋ง์ณค์ต๋๋ค. ๋ฌผ๋ก ์ค๋ ๋ ์ค์ผ์ค๋ฌ๋ ๋ค๋ฅธ ์์(์: 0-1-2 ๋์ 2-1-0)๋ก ์ค๋ ๋๋ฅผ ์์ํ ์ ์์ง๋ง ์์น์ ๋์ผํฉ๋๋ค.
Happens-before ๊ท์น
์ค๋ ๋ง์ง๋ง์ผ๋ก ๋ค๋ฃฐ ๋ด์ฉ์ ' ์ผ์ด๋๊ธฐ ์ ์ '๋ผ๋ ๊ฐ๋ ์ ๋๋ค. ์ด๋ฏธ ์๊ณ ์๋ฏ์ด Java์์ ์ค๋ ๋ ์ค์ผ์ค๋ฌ๋ ์์ ์ ์ํํ๊ธฐ ์ํด ์ค๋ ๋์ ์๊ฐ๊ณผ ๋ฆฌ์์ค๋ฅผ ํ ๋นํ๋ ์์ ๊ณผ ๊ด๋ จ๋ ๋๋ถ๋ถ์ ์์ ์ ์ํํฉ๋๋ค. ๋ํ ์ผ๋ฐ์ ์ผ๋ก ์์ธกํ ์ ์๋ ์์์ ์์๋ก ์ค๋ ๋๊ฐ ์คํ๋๋ ๋ฐฉ์์ ๋ฐ๋ณตํด์ ๋ณด์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ผ๋ฐ์ ์ผ๋ก ์ด์ ์ ์ํํ '์์ฐจ์ ' ํ๋ก๊ทธ๋๋ฐ ์ดํ์๋ ๋ฉํฐ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์ด ๋ฌด์์๋ก ๋ณด์ ๋๋ค. ๋ค์ค ์ค๋ ๋ ํ๋ก๊ทธ๋จ์ ํ๋ฆ์ ์ ์ดํ๊ธฐ ์ํด ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค๊ณ ์ด๋ฏธ ๋ฏฟ๊ฒ ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ Java์ ๋ฉํฐ์ค๋ ๋ฉ์๋ ํ ๊ฐ์ง ๊ธฐ๋ฅ์ด ๋ ์์ต๋๋ค. ๋ฐ๋ก 4๊ฐ์ ' ์ผ์ด๋๊ธฐ ์ ์ ' ๊ท์น์ ๋๋ค. ์ด๋ฌํ ๊ท์น์ ์ดํดํ๋ ๊ฒ์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. ๋ ๊ฐ์ ์ค๋ ๋๊ฐ ์๋ค๊ณ ์์ํด๋ณด์ญ์์คA
.B
. ์ด๋ฌํ ๊ฐ ์ค๋ ๋๋ ์์
์ ์ํํ ์ 1
์์ผ๋ฉฐ 2
. ๊ฐ ๊ท์น์์ ' A ๋ฐ์-B ์ด์ ' ์ด๋ผ๊ณ ํ๋ ๊ฒ์ A
์์
์ ์ ์ค๋ ๋์ ์ํด ๋ณ๊ฒฝ๋ ๋ชจ๋ ๋ด์ฉ ๊ณผ ์ด ์์
์ผ๋ก ์ธํ ๋ณ๊ฒฝ ๋ด์ฉ์ด ์์
์ด ์ํ๋ ๋์ ๊ทธ ์ดํ์ 1
์ค๋ ๋์ ํ์๋จ์ ์๋ฏธํฉ๋๋ค. ๊ฐ ๊ท์น์ ๋ฉํฐ์ค๋ ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ ๋ ํน์ ์ด๋ฒคํธ๊ฐ ๋ค๋ฅธ ์ด๋ฒคํธ๋ณด๋ค 100% ๋จผ์ ๋ฐ์ํ๊ณ ์์
์ ์ค๋ ๋๊ฐ ์์
์ค์ ์ค๋ ๋๊ฐ ๋ณ๊ฒฝํ ์ฌํญ์ ํญ์ ์ธ์ํ๋๋ก ๋ณด์ฅํฉ๋๋ค . ๊ทธ๊ฒ๋ค์ ๊ฒํ ํด ๋ด
์๋ค. B
2
2
B
A
1
๊ท์น 1.
๋ฎคํ ์ค ํด์ ๋ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ๋์ผํ ๋ชจ๋ํฐ๋ฅผ ํ๋ํ๊ธฐ ์ ์ ๋ฐ์ํฉ๋๋ค . ๋๋ ๋น์ ์ด ์ฌ๊ธฐ์์ ๋ชจ๋ ๊ฒ์ ์ดํดํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ฐ์ฒด ๋๋ ํด๋์ค์ ๋ฎคํ ์ค๊ฐ ํ๋์ ์ค๋ ๋, ์๋ฅผ ๋ค์ด thread ์ ์ํด ํ๋๋๋ฉดA
๋ค๋ฅธ ์ค๋ ๋(thread B
)๋ ๋์์ ์ด๋ฅผ ํ๋ํ ์ ์์ต๋๋ค. ๋ฎคํ
์ค๊ฐ ํด์ ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค.
๊ท์น 2.
์ดThread.start()
๋ฐฉ๋ฒ์ ์ ์ ๋ฐ์ํฉ๋๋ค Thread.run()
. ๋ค์ ๋งํ์ง๋ง ์ฌ๊ธฐ์ ์ด๋ ค์ด ๊ฒ์ ์์ต๋๋ค. ๋ฉ์๋ ๋ด์์ ์ฝ๋ ์คํ์ ์์ํ๋ ค๋ฉด ์ค๋ ๋์์ ๋ฉ์๋๋ฅผ run()
ํธ์ถํด์ผ ํ๋ค๋ ๊ฒ์ ์ด๋ฏธ ์๊ณ ์์ต๋๋ค. start()
ํนํ ๋ฉ์๋ ์์ฒด๊ฐ ์๋๋ผ ์์ ๋ฉ์๋์
๋๋ค run()
! ์ด ๊ท์น์ ๊ฐ ํธ์ถ๋๊ธฐ ์ ์ ์ค์ ๋ ๋ชจ๋ ๋ณ์์ ๊ฐ์ด ์์๋๋ฉด ๋ฉ์๋ Thread.start()
๋ด์์ ํ์๋๋๋ก ํฉ๋๋ค run()
.
๊ท์น 3.
run()
๋ฉ์๋ ์ ๋์ ๋ฉ์๋ ์์ ๋ฐํ๋๊ธฐ ์ ์ ๋ฐ์ํฉ๋๋คjoin()
. ๋ ๊ฐ์ ์ค๋ ๋๋ก ๋์๊ฐ ๋ณด๊ฒ ์ต๋๋ค. A
๋ฐ B
. join()
์ค๋ ๋๊ฐ ์์
์ ์ํํ๊ธฐ ์ ์ B
์ค๋ ๋ ์๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋๋ก ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค . A
์ด๋ A ๊ฐ์ฒด์ run()
๋ฉ์๋๊ฐ ๋๊น์ง ์คํ๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. run()
๊ทธ๋ฆฌ๊ณ ์ค๋ ๋ ๋ฉ์๋ ์์ ๋ฐ์ํ๋ ๋ฐ์ดํฐ์ ๋ํ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ค๋ ๋ ๊ฐ ์์ฒด ์์
์ ์์ํ ์ ์๋๋ก ์ค๋ ๋๊ฐ ์์
์ ์๋ฃํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์์
์ด ์๋ฃ๋๋ฉด ์ค๋ ๋ A
์์ ๋ณผ ์ ์๋๋ก 100% ๋ณด์ฅ๋ฉ๋๋ค .B
A
๊ท์น 4.
volatile
๋ณ์ ์ ์ฐ๊ธฐ๋ ๋์ผํ ๋ณ์์์ ์ฝ๊ธฐ ์ ์ ๋ฐ์ํฉ๋๋ค . ํค์๋ ๋ฅผ ์ฌ์ฉํ๋ฉด volatile
์ค์ ๋ก ํญ์ ํ์ฌ ๊ฐ์ ์ป์ต๋๋ค. ๋๋ long
( double
์ฌ๊ธฐ์ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ์ ๋ํด ์์์ ์ด์ผ๊ธฐํ์ต๋๋ค). ์ด๋ฏธ ์๊ณ ์๋ฏ์ด ์ผ๋ถ ์ค๋ ๋์์ ๋ณ๊ฒฝํ ๋ด์ฉ์ด ๋ค๋ฅธ ์ค๋ ๋์ ํญ์ ํ์๋๋ ๊ฒ์ ์๋๋๋ค. ๊ทธ๋ฌ๋ ๋ฌผ๋ก ๊ทธ๋ฌํ ํ๋์ด ์ฐ๋ฆฌ์๊ฒ ์ ํฉํ์ง ์์ ์ํฉ์ด ๋งค์ฐ ์์ฃผ ๋ฐ์ํฉ๋๋ค. ์ค๋ ๋์ ๋ณ์์ ๊ฐ์ ํ ๋นํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค A
.
int z;
โฆ.
z = 555;
B
์ค๋ ๋๊ฐ ์ฝ์์ ๋ณ์ ๊ฐ์ ํ์ํด์ผ ํ๋ ๊ฒฝ์ฐ z
ํ ๋น๋ ๊ฐ์ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ์ฝ๊ฒ 0์ ํ์ํ ์ ์์ต๋๋ค. z
๊ทธ๋ฌ๋ ๊ท์น 4๋ ๋ณ์๋ฅผ ๋ก ์ ์ธํ๋ฉด volatile
ํ ์ค๋ ๋์์ ํด๋น ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ํญ์ ๋ค๋ฅธ ์ค๋ ๋์์ ๋ณผ ์ ์์์ ๋ณด์ฅํฉ๋๋ค. volatile
์ด์ ์ฝ๋์ ๋จ์ด๋ฅผ ์ถ๊ฐํ๋ฉด ...
volatile int z;
โฆ.
z = 555;
B
...๊ทธ๋ฐ ๋ค์ ์ค๋ ๋๊ฐ 0์ ํ์ํ ์ ์๋ ์ํฉ์ ๋ฐฉ์งํฉ๋๋ค. volatile
๋ณ์๋ฅผ ์ฝ๊ธฐ ์ ์ ๋ณ์์ ์ฐ๊ธฐ๊ฐ ๋ฐ์ํฉ๋๋ค.