์•ˆ๋…•! ์šฐ๋ฆฌ๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์— ๋Œ€ํ•œ ์—ฐ๊ตฌ๋ฅผ ๊ณ„์†ํ•ฉ๋‹ˆ๋‹ค. volatile์˜ค๋Š˜์€ ํ‚ค์›Œ๋“œ์™€ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค yield(). ๋‹ค์ด๋น™ํ•˜์ž :)

ํœ˜๋ฐœ์„ฑ ํ‚ค์›Œ๋“œ

๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค ๋•Œ ๋‘ ๊ฐ€์ง€ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ์— ์ง๋ฉดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ์งธ, ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰ ์ค‘์ผ ๋•Œ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ณ€์ˆ˜ ๊ฐ’์„ ์บ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ( 'ํœ˜๋ฐœ์„ฑ ์‚ฌ์šฉ'์ด๋ผ๋Š” ๊ฐ•์˜ ์—์„œ ์ด๋ฏธ ์ด์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค ). ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์ง€๋งŒ ๋‘ ๋ฒˆ์งธ ์Šค๋ ˆ๋“œ๋Š” ๋ณ€์ˆ˜์˜ ์บ์‹œ๋œ ๋ณต์‚ฌ๋ณธ์œผ๋กœ ์ž‘์—…ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ณผ ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ๋‹น์—ฐํžˆ ๊ทธ ๊ฒฐ๊ณผ๋Š” ์‹ฌ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋ž˜๋œ ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ์€ํ–‰ ๊ณ„์ขŒ ์ž”์•ก์ด ๊ฐ‘์ž๊ธฐ ๋ฌด์ž‘์œ„๋กœ ์œ„์•„๋ž˜๋กœ ๋›ฐ๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์žฌ๋ฏธ์žˆ์„ ๊ฒƒ ๊ฐ™์ง€ ์•Š์ฃ ? ๋‘˜์งธ, Java์—์„œ ๋ชจ๋“  ๊ธฐ๋ณธ ์œ ํ˜•์„ ์ฝ๊ณ  ์“ฐ๋Š” ์ž‘์—…,longdouble, ์›์ž์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•œ ์Šค๋ ˆ๋“œ์—์„œ ๋ณ€์ˆ˜ ๊ฐ’์„ ๋ณ€๊ฒฝ intํ•˜๊ณ  ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ ๋ณ€์ˆ˜ ๊ฐ’์„ ์ฝ์œผ๋ฉด ์ด์ „ ๊ฐ’ ๋˜๋Š” ์ƒˆ ๊ฐ’, ์ฆ‰ ๋ณ€๊ฒฝ ๊ฒฐ๊ณผ ๊ฐ’์„ ์–ป๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ 1์—์„œ. '์ค‘๊ฐ„ ๊ฐ’'์ด ์—†์Šต๋‹ˆ๋‹ค. long๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ s์™€ doubles ์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค . ์™œ? ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์ง€์› ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์‹œ์ž‘ ๋‹จ๊ณ„์—์„œ Java์˜ ๊ธฐ๋ณธ ์›์น™์ด 'ํ•œ ๋ฒˆ ์ž‘์„ฑํ•˜๊ณ  ์–ด๋””์„œ๋‚˜ ์‹คํ–‰'์ด๋ผ๊ณ  ๋งํ–ˆ๋˜ ๊ฒƒ์„ ๊ธฐ์–ตํ•˜์‹ญ๋‹ˆ๊นŒ? ์ด๋Š” ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์ง€์›์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Windows ์šด์˜ ์ฒด์ œ์—์„œ ๋‹ค๋ฅธ ๋ฒ„์ „์˜ Linux ๋˜๋Š” MacOS๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๊ทธ๋“ค ๋ชจ๋‘์— ์žฅ์• ์—†์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. 64๋น„ํŠธ๋กœ ๊ณ„์‚ฐํ•˜๋ฉด,longdoubleJava์—์„œ '๊ฐ€์žฅ ๋ฌด๊ฑฐ์šด' ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํŠน์ • 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) {

   }
}
...๊ทธ๊ฒƒ์€ ๋‹ค์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค:
  1. ํ•ญ์ƒ ์›์ž์ ์œผ๋กœ ์ฝ๊ณ  ์”๋‹ˆ๋‹ค. 64 double๋น„ํŠธ๋‚˜ long.
  2. Java ์‹œ์Šคํ…œ์€ ์ด๋ฅผ ์บ์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 10๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž์ฒด ๋กœ์ปฌ ๋ณต์‚ฌ๋ณธ์œผ๋กœ ์ž‘์—…ํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ๋‘ ๊ฐ€์ง€ ๋งค์šฐ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๊ฐ€ ๋‹จ ํ•˜๋‚˜์˜ ๋‹จ์–ด๋กœ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค :)

yield() ๋ฉ”์„œ๋“œ

์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ํด๋ž˜์Šค์˜ ๋งŽ์€ Thread๋ฉ”์„œ๋“œ๋ฅผ ๊ฒ€ํ† ํ–ˆ์ง€๋งŒ ์ฒ˜์Œ ์•Œ๊ฒŒ ๋  ์ค‘์š”ํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. yield()๋ฐฉ๋ฒ• ์ž…๋‹ˆ๋‹ค . ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ๊ทธ ์ด๋ฆ„์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋ฅผ ์ •ํ™•ํžˆ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค! ์Šค๋ ˆ๋“œ ๊ด€๋ฆฌ.  ํœ˜๋ฐœ์„ฑ ํ‚ค์›Œ๋“œ ๋ฐ yield() ๋ฉ”์„œ๋“œ - 2์Šค๋ ˆ๋“œ์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด 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% ๋จผ์ € ๋ฐœ์ƒํ•˜๊ณ  ์ž‘์—… ์‹œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž‘์—… ์ค‘์— ์Šค๋ ˆ๋“œ๊ฐ€ ๋ณ€๊ฒฝํ•œ ์‚ฌํ•ญ์„ ํ•ญ์ƒ ์ธ์‹ํ•˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค . ๊ทธ๊ฒƒ๋“ค์„ ๊ฒ€ํ† ํ•ด ๋ด…์‹œ๋‹ค. B22BA1

๊ทœ์น™ 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% ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค .BA

๊ทœ์น™ 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๋ณ€์ˆ˜๋ฅผ ์ฝ๊ธฐ ์ „์— ๋ณ€์ˆ˜์— ์“ฐ๊ธฐ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.