JavaRush /Java Blog /Random-KO /๋ฒˆ์—ญ: ์Šค๋ ˆ๋“œ๋ณ„ ์ƒ์œ„ 50๊ฐœ ์ธํ„ฐ๋ทฐ ์งˆ๋ฌธ. 1 ๋ถ€.
KapChook
๋ ˆ๋ฒจ 19
Volga

๋ฒˆ์—ญ: ์Šค๋ ˆ๋“œ๋ณ„ ์ƒ์œ„ 50๊ฐœ ์ธํ„ฐ๋ทฐ ์งˆ๋ฌธ. 1 ๋ถ€.

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
์‹ ์ž…์ƒ, ์ˆ™๋ จ๋œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ์œ„ํ•œ ์ƒ์œ„ 50๊ฐ€์ง€ Java ์Šค๋ ˆ๋“œ ์ธํ„ฐ๋ทฐ ์งˆ๋ฌธ ๋‹ต๋ณ€ ์›๋ณธ ๊ธฐ์‚ฌ ๋ฒˆ์—ญ์˜ ์ฒซ ๋ฒˆ์งธ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค . ๋‘ ๋ฒˆ์งธ ๋ถ€๋ถ„. ์ฐธ๊ณ : ๊ธฐ์‚ฌ๊ฐ€ ํฐ ๊ฒƒ์œผ๋กœ ํŒ๋ช…๋˜์—ˆ์œผ๋ฏ€๋กœ ํ•˜๋‚˜์˜ ์ฃผ์ œ์— ๋งž์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ๊ฝค ๋ณต์žกํ•ด์„œ ์ตœ์„ ์„ ๋‹คํ•ด ๊ตฌ๊ธ€๋งํ•ด ๋ดค์ง€๋งŒ ๊ทธ๋ž˜๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. ๋”ฐ๋ผ์„œ ์˜์–ด์— ๋Šฅํ†ตํ•œ ์ฐธ๊ฐ€์ž๋“ค์€ ํ˜น์‹œ๋ผ๋„ ์ž˜๋ชป ์ดํ•ดํ–ˆ๊ฑฐ๋‚˜ ์ž˜๋ชป ๋ฒˆ์—ญํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์œผ๋ฉด ์›๋ฌธ์„ ๋ณด์‹œ๊ณ  ๋ฒˆ์—ญ๋ฌธ๊ณผ ๋น„๊ตํ•ด ๋ณด์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋ฏธ๋ฆฌ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์„ ๋ฐฐ๋“  ํ›„๋ฐฐ๋“ , ๊ฒฝํ—˜์ด ๋งŽ๋“  ์ดˆ๋ณด์ž๋“  ๋ชจ๋“  ์ธํ„ฐ๋ทฐ์—์„œ ์Šค๋ ˆ๋“œ, ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๋ฐ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์งˆ๋ฌธ์— ์ง๋ฉดํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ด๋Ÿฌํ•œ ๋‚ด์žฅ๋œ ๋™์‹œ์„ฑ ์ง€์›์€ Java์˜ ๊ฐ€์žฅ ํฐ ์žฅ์  ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ Java๊ฐ€ ๊ธฐ์—…๊ฐ€์™€ ํ”„๋กœ๊ทธ๋ž˜๋จธ ๋ชจ๋‘ ์‚ฌ์ด์—์„œ ์ธ๊ธฐ๋ฅผ ์–ป๋Š” ๋ฐ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์ต์„ฑ์ด ๊ฐ€์žฅ ์ข‹์€ Java ๊ฐœ๋ฐœ์ž ์ง์œ„๋ฅผ ์–ป์œผ๋ ค๋ฉด ๋›ฐ์–ด๋‚œ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ๊ธฐ์ˆ ๊ณผ ๊ณ ์„ฑ๋Šฅ, ์ €์ง€์—ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ, ๋””๋ฒ„๊น… ๋ฐ ํŠœ๋‹ ๊ฒฝํ—˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฉด์ ‘์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์š”๊ตฌ๋˜๋Š” ๊ธฐ์ˆ  ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ Java ๋ฉด์ ‘์—์„œ๋Š” ๋ฉด์ ‘๊ด€์ด ์Šค๋ ˆ๋“œ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๋ถ€ํ„ฐ ์ฒœ์ฒœํžˆ ์‹œ์ž‘ํ•˜์—ฌ ์Šค๋ ˆ๋“œ๊ฐ€ ์™œ ํ•„์š”ํ•œ์ง€, ์–ด๋–ป๊ฒŒ ์ƒ์„ฑํ•˜๋Š”์ง€, ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€์ง€, Thread์—์„œ ์ƒ์† ๋ฐ›๊ฑฐ๋‚˜ Runnable์„ ๊ตฌํ˜„ํ•˜๋Š”์ง€ ๋“ฑ์˜ ์งˆ๋ฌธ์„ ํ•œ ํ›„ ์ฒœ์ฒœํžˆ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋™์‹œ์„ฑ์˜ ์–ด๋ ค์›€, ๋ณ‘๋ ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์‹œ ์ง๋ฉดํ•˜๋Š” ์–ด๋ ค์›€, JDK 1.5์— ๋„์ž…๋œ ๋†’์€ ์ˆ˜์ค€์˜ ๋™์‹œ์„ฑ ์œ ํ‹ธ๋ฆฌํ‹ฐ, ๋ณ‘๋ ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์›์น™ ๋ฐ ๋””์ž์ธ ํŒจํ„ด, ๊ณ ์ „์ ์ธ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์˜ ๊ธฐ๋ณธ์„ ์•„๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ต์ฐฉ ์ƒํƒœ, ๊ฒฝ์Ÿ ์กฐ๊ฑด, ๋ฉ”๋ชจ๋ฆฌ ๋ถˆ์ผ์น˜ ๋ฐ ๋‹ค์–‘ํ•œ ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ ๋ฌธ์ œ์™€ ๊ฐ™์€ ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ์ˆ ์€ ์ฒ ์ €ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑฐ์ณ ๋‹ค์–‘ํ•œ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ๋ฐ ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ Java ๊ฐœ๋ฐœ์ž๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ธํ„ฐ๋ทฐ ์ „์— ์งˆ๋ฌธ์„ ์ฝ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋‚˜์œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ์ด๋ฅผ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์งˆ๋ฌธ์„ ์Œ“๊ณ  ๋˜‘๊ฐ™์€ ์—ฐ์Šต์„ ํ•˜๋ฉด ์‹œ๊ฐ„๋‚ญ๋น„๋„ ๋งŽ์ด ๋˜์–ด์„œ ์ด ๋ชฉ๋ก์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
  1. Java์˜ ์Šค๋ ˆ๋“œ๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  2. ์Šค๋ ˆ๋“œ๋Š” ๋…๋ฆฝ์ ์ธ ์‹คํ–‰ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค. ๊ทธ ๋ชฉํ‘œ๋Š” ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋‹ค์ค‘ ํ”„๋กœ์„ธ์„œ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด CPU ๋ฐ”์ธ๋”ฉ๋œ ์ž‘์—… ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž‘์—…์„ ์™„๋ฃŒํ•˜๋Š” ๋ฐ 100๋ฐ€๋ฆฌ์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๋Š” ๊ฒฝ์šฐ 10๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์ž‘์—…์„ 10๋ฐ€๋ฆฌ์ดˆ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Java๋Š” ์–ธ์–ด ์ˆ˜์ค€์—์„œ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์— ๋Œ€ํ•œ ๋›ฐ์–ด๋‚œ ์ง€์›์„ ์ œ๊ณตํ•˜๋ฉฐ ์ด๋Š” Java์˜ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ์žฅ์  ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.
  3. Java์˜ ์Šค๋ ˆ๋“œ์™€ ํ”„๋กœ์„ธ์Šค์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  4. ์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์— ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ํ”„๋กœ์„ธ์Šค๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์—์„œ ์‹คํ–‰๋˜์ง€๋งŒ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๋Š” ๋™์ผํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ๋‹ค๋ฅด๋ฉฐ ํ•ด๋‹น ์Šค๋ ˆ๋“œ์˜ ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ์™€ ํ˜ผ๋™ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.
  5. ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  6. ์–ธ์–ด ์ˆ˜์ค€์—์„œ๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. java.lang.Thread ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ด์ง€๋งŒ ์‹คํ–‰ํ•˜๋ ค๋ฉด java.lang.Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐ์ฒด์ธ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Thread ํด๋ž˜์Šค๋Š” Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋ฏ€๋กœ Thread์—์„œ ํด๋ž˜์Šค๋ฅผ ํŒŒ์ƒ์‹œํ‚ค๊ฑฐ๋‚˜ ๊ทธ ์•ˆ์— Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ run() ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  7. ์–ธ์ œ Runnable์„ ์‚ฌ์šฉํ•˜๊ณ  ์–ธ์ œ Thread๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ?

  8. ์ด๊ฒƒ์€ ์ด์ „ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์žˆ๋“ฏ์ด ์Šค๋ ˆ๋“œ๋Š” Thread ํด๋ž˜์Šค์—์„œ ์ƒ์†ํ•˜๊ฑฐ๋‚˜ Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๋ฐฉ๋ฒ•์ด ๋” ์ข‹๊ณ  ์–ธ์ œ ์–ด๋–ค ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์งˆ๋ฌธ์ด ์ƒ๊น๋‹ˆ๋‹ค. Java๊ฐ€ ๋‹ค์ค‘ ํด๋ž˜์Šค ์ƒ์†์„ ์ง€์›ํ•˜์ง€ ์•Š์ง€๋งŒ ๋‹ค์ค‘ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์ด ์งˆ๋ฌธ์— ์‰ฝ๊ฒŒ ๋Œ€๋‹ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ์ƒ์†ํ•˜๋ ค๋ฉด Runnable์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์Šต๋‹ˆ๋‹ค.
  9. start()์™€ run() ๋ฉ”์†Œ๋“œ์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  10. ๊ณผ๊ฑฐ์˜ ํŠธ๋ฆญ ์งˆ๋ฌธ ์ค‘ ํ•˜๋‚˜์ด์ง€๋งŒ Java์˜ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์— ๋Œ€ํ•œ ํ”ผ์ƒ์ ์ธ ์ดํ•ด๋ฅผ ๊ตฌ๋ณ„ํ•˜๋Š” ๋ฐ๋Š” ์—ฌ์ „ํžˆ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. start() ๋ฉ”์†Œ๋“œ๋Š” ์ƒˆ๋กœ์šด ์Šค๋ ˆ๋“œ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. start()๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ run() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋”๋ผ๋„ ๋‹จ์ˆœํžˆ run()์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๊ณผ๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค. run()์„ ์ผ๋ฐ˜ ๋ฉ”์†Œ๋“œ๋กœ ํ˜ธ์ถœํ•˜๋ฉด ๋™์ผํ•œ ์Šค๋ ˆ๋“œ์—์„œ ํ˜ธ์ถœ๋˜๋ฉฐ ์ƒˆ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹œ์ž‘๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” start() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  11. ์‹คํ–‰ ๊ฐ€๋Šฅ๊ณผ ํ˜ธ์ถœ ๊ฐ€๋Šฅ์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  12. ๋‘ ์ธํ„ฐํŽ˜์ด์Šค ๋ชจ๋‘ ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰๋˜๋„๋ก ๊ณ ์•ˆ๋œ ์ž‘์—…์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. Runnable์€ JDK 1.0๋ถ€ํ„ฐ ์žˆ์—ˆ๊ณ  Callable์€ JDK 1.5์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ Callable์˜ call() ๋ฉ”์†Œ๋“œ๊ฐ€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ธ๋ฐ, ์ด๋Š” Runnable์˜ run() ๋ฉ”์†Œ๋“œ์—์„œ๋Š” ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Callable์€ ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” Future ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  13. CyclicBarrier์™€ CountDownLatch์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  14. ๋‘ ๋™๊ธฐํ™” ์žฅ์น˜ ๋ชจ๋‘ ์Šค๋ ˆ๋“œ๊ฐ€ ์„œ๋กœ๋ฅผ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•˜์ง€๋งŒ, ๋‘ ๋™๊ธฐํ™” ์žฅ์น˜์˜ ์ฃผ์š” ์ฐจ์ด์ ์€ ์นด์šดํ„ฐ๊ฐ€ 0์— ๋„๋‹ฌํ•œ ํ›„์—๋Š” CountDownLatch๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์ง€๋งŒ ์žฅ๋ฒฝ์ด ๋ฌด๋„ˆ์ง„ ํ›„์—๋„ CyclicBarrier๋ฅผ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  15. Java ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  16. ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ์€ Java ํ”„๋กœ๊ทธ๋žจ์ด ์—ฌ๋Ÿฌ ๋ฉ”๋ชจ๋ฆฌ, ํ”„๋กœ์„ธ์„œ ๋ฐ ์šด์˜ ์ฒด์ œ ์•„ํ‚คํ…์ฒ˜์—์„œ ๊ฒฐ์ •๋ก ์ ์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ผ๋ จ์˜ ๊ทœ์น™ ๋ฐ ์ง€์นจ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค์ค‘ ํ•„๋ผ๋ฉ˜ํŠธ์˜ ๊ฒฝ์šฐ ํŠนํžˆ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ์€ ํ•œ ์Šค๋ ˆ๋“œ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์— ํ‘œ์‹œ๋˜๋„๋ก ๋ณด์žฅํ•˜๋ฉฐ, ๊ทธ ์ค‘ ํ•˜๋‚˜๋Š” ์‚ฌ์ „ ๋ฐœ์ƒ ๊ด€๊ณ„์ž…๋‹ˆ๋‹ค. ์ด ๊ด€๊ณ„๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋žจ์˜ ๋™์ž‘์„ ์˜ˆ์ธกํ•˜๊ณ  ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ทœ์น™์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ณด์ฆ์ด ๋ฐœ์ƒํ•˜๊ธฐ ์ „์— ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    • ์Šค๋ ˆ๋“œ์˜ ๋ชจ๋“  ์ž‘์—…์€ ํ”„๋กœ๊ทธ๋žจ ์ˆœ์„œ ๊ทœ์น™(ํ”„๋กœ๊ทธ๋žจ ์ˆœ์„œ ๊ทœ์น™์ด๋ผ๊ณ ๋„ ํ•จ)์— ๋”ฐ๋ผ ํ•ด๋‹น ์Šค๋ ˆ๋“œ์˜ ๋ชจ๋“  ์ž‘์—…๋ณด๋‹ค ๋จผ์ € ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
    • ๋ชจ๋‹ˆํ„ฐ ์ž ๊ธˆ ํ•ด์ œ๋Š” ๋™์ผํ•œ ๋ชจ๋‹ˆํ„ฐ์˜ ๊ฐ ํ›„์† ์ž ๊ธˆ(๋ชจ๋‹ˆํ„ฐ ์ž ๊ธˆ ๊ทœ์น™์ด๋ผ๊ณ ๋„ ํ•จ) ์ „์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
    • ํœ˜๋ฐœ์„ฑ ํ•„๋“œ์— ๋Œ€ํ•œ ์“ฐ๊ธฐ๋Š” ํœ˜๋ฐœ์„ฑ ๋ณ€์ˆ˜ ๊ทœ์น™์— ๋”ฐ๋ผ ํ•ด๋‹น ํ•„๋“œ๋ฅผ ์ดํ›„์— ์ฝ์„ ๋•Œ๋งˆ๋‹ค ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
    • ์Šค๋ ˆ๋“œ์—์„œ Thread.start()์— ๋Œ€ํ•œ ํ˜ธ์ถœ์€ Thread.join()์ด ์„ฑ๊ณตํ•œ ํ›„ ๋˜๋Š” Thread.isAlive()๊ฐ€ false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ Thread.start() ๊ทœ์น™์— ๋”ฐ๋ผ ์Šค๋ ˆ๋“œ๊ฐ€ ์ค‘์ง€๋˜์—ˆ์Œ์„ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์•Œ๊ธฐ ์ „์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. .
    • ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์— ์˜ํ•ด ์ค‘๋‹จ๋˜๋Š” ์Šค๋ ˆ๋“œ๋Š” ์ค‘๋‹จ๋œ ์Šค๋ ˆ๋“œ๊ฐ€ ์Šค๋ ˆ๋“œ์˜ ์ค‘๋‹จ ๊ทœ์น™์ธ ์ค‘๋‹จ(InterruptedException์„ ๋ฐœ์ƒ์‹œํ‚ค๊ฑฐ๋‚˜ isInterrupted()๋ฅผ ํ™•์ธํ•˜์—ฌ)์„ ์ธ์ง€ํ•˜๊ธฐ ์ „์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
    • ๊ฐœ์ฒด ์ƒ์„ฑ์ž์˜ ๋์€ ํ•ด๋‹น ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์ข…๋ฃŒ์ž ๊ทœ์น™์ธ ์ข…๋ฃŒ์ž ๊ทœ์น™์ด ์‹œ์ž‘๋˜๊ธฐ ์ „์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
    • A๊ฐ€ B๋ณด๋‹ค ๋จผ์ € ๋ฐœ์ƒํ•˜๊ณ  B๊ฐ€ C๋ณด๋‹ค ๋จผ์ € ๋ฐœ์ƒํ•˜๋ฉด A๊ฐ€ C๋ณด๋‹ค ๋จผ์ € ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ „์ด์„ฑ์ด ๋ณด์žฅ๋จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  17. ํœ˜๋ฐœ์„ฑ ๋ณ€์ˆ˜๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  18. ํœ˜๋ฐœ์„ฑ์€ ์†์„ฑ์—๋งŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ˆ˜ ์ˆ˜์ •์ž์ž…๋‹ˆ๋‹ค. ๋ณ‘๋ ฌ Java ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ๋™๊ธฐํ™” ์žฅ์น˜๊ฐ€ ์—†์œผ๋ฉด ์†์„ฑ์— ๋Œ€ํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์— ์˜ํ•ด ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํœ˜๋ฐœ์„ฑ ๋ณ€์ˆ˜๋Š” ์ด์ „ ์งˆ๋ฌธ์˜ ํœ˜๋ฐœ์„ฑ ๋ณ€์ˆ˜ ๊ทœ์น™์— ๋ช…์‹œ๋œ ๋Œ€๋กœ ํ›„์† ์ฝ๊ธฐ ์ „์— ์“ฐ๊ธฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
  19. ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? Vector ํด๋ž˜์Šค๋Š” ์•ˆ์ „ํ•œ๊ฐ€์š”?

  20. ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ์€ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰๋˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ๋  ๋•Œ ์ฝ”๋“œ๊ฐ€ ์˜๋„ํ•œ ๋Œ€๋กœ ์ž‘๋™ํ•˜๋„๋ก ๋ณด์žฅํ•˜๋Š” ๊ฐœ์ฒด ๋˜๋Š” ์ฝ”๋“œ์˜ ์†์„ฑ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์Šค๋ ˆ๋“œ ์•ˆ์ „ ์นด์šดํ„ฐ๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์—์„œ ๋™์ผํ•œ ์นด์šดํ„ฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ ์นด์šดํŠธ๋ฅผ ๊ฑด๋„ˆ๋›ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ ์ปฌ๋ ‰์…˜ ํด๋ž˜์Šค๋Š” ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•œ ํด๋ž˜์Šค์™€ ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ํด๋ž˜์Šค์˜ ๋‘ ๊ฐ€์ง€ ๋ฒ”์ฃผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Vector๋Š” ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜๋ฉฐ Vector์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋™๊ธฐํ™”ํ•˜์—ฌ ์ด๋ฅผ ๋‹ฌ์„ฑํ•˜๋Š” ๋ฐ˜๋ฉด, ์ด์— ์ƒ์‘ํ•˜๋Š” ArrayList๋Š” ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  21. ๊ฒฝ์Ÿ ์กฐ๊ฑด์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  22. ๊ฒฝ์Ÿ ์กฐ๊ฑด์€ ๋ฏธ๋ฌ˜ํ•œ ๋ฒ„๊ทธ์˜ ์›์ธ์ž…๋‹ˆ๋‹ค. ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ ๊ฐ„์˜ ๊ฒฝํ•ฉ์œผ๋กœ ์ธํ•ด ๊ฒฝ์Ÿ ์กฐ๊ฑด์ด ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ๋จผ์ € ์‹คํ–‰ํ•ด์•ผ ํ•  ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฒฝ์Ÿ์—์„œ ์ง€๊ณ  ๋‘ ๋ฒˆ์งธ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉด ์ฝ”๋“œ์˜ ๋™์ž‘์ด ๋ฐ”๋€Œ์–ด ๋น„๊ฒฐ์ •์  ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์Šค๋ ˆ๋“œ ๊ฐ„ ๊ฒฝ์Ÿ์˜ ์ง€์ €๋ถ„ํ•œ ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ํฌ์ฐฉํ•˜๊ณ  ์žฌํ˜„ํ•˜๊ธฐ ๊ฐ€์žฅ ์–ด๋ ค์šด ๋ฒ„๊ทธ ์ค‘ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค. ๊ฒฝ์Ÿ ์กฐ๊ฑด์˜ ์˜ˆ๋กœ๋Š” ๋ถˆ๊ทœ์น™ํ•œ ์‹คํ–‰์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  23. ์Šค๋ ˆ๋“œ๋ฅผ ์ค‘์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  24. ๋‚˜๋Š” ํ•ญ์ƒ Java๊ฐ€ ๋ชจ๋“  ๊ฒƒ์— ๋Œ€ํ•ด ํ’๋ถ€ํ•œ API๋ฅผ ์ œ๊ณตํ•œ๋‹ค๊ณ  ๋งํ–ˆ์ง€๋งŒ ์•„์ด๋Ÿฌ๋‹ˆํ•˜๊ฒŒ๋„ ์Šค๋ ˆ๋“œ๋ฅผ ์ค‘์ง€ํ•˜๋Š” ํŽธ๋ฆฌํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. JDK 1.0์—๋Š” ์ž ์žฌ์ ์ธ ๊ต์ฐฉ ์ƒํƒœ ์œ„ํ˜‘์œผ๋กœ ์ธํ•ด ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋œ stop(), suspens() ๋ฐ ์ด๋ ฅ์„œ()์™€ ๊ฐ™์€ ์—ฌ๋Ÿฌ ์ œ์–ด ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ดํ›„๋กœ Java API ๊ฐœ๋ฐœ์ž๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋ ค๋Š” ์‹œ๋„๋ฅผ ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. -์ €ํ•ญ์„ฑ -์Šค๋ ˆ๋“œ๋ฅผ ๋ฉˆ์ถ”๋Š” ์•ˆ์ „ํ•˜๊ณ  ์šฐ์•„ํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ๋Œ€๋ถ€๋ถ„ ์Šค๋ ˆ๋“œ๊ฐ€ run() ๋˜๋Š” call() ๋ฉ”์„œ๋“œ ์‹คํ–‰์„ ๋งˆ์น˜์ž๋งˆ์ž ์ž์ฒด์ ์œผ๋กœ ์ค‘์ง€๋œ๋‹ค๋Š” ์‚ฌ์‹ค์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜๋™์œผ๋กœ ์ค‘์ง€ํ•˜๋ ค๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ํœ˜๋ฐœ์„ฑ ๋ถ€์šธ ๋ณ€์ˆ˜๋ฅผ ํ™œ์šฉํ•˜๊ณ  run() ๋ฉ”์„œ๋“œ์— ๋ฃจํ”„๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ ๋ฐ˜๋ณต์—์„œ ํ•ด๋‹น ๊ฐ’์„ ํ™•์ธํ•˜๊ฑฐ๋‚˜, Interrupt() ๋ฉ”์„œ๋“œ๋กœ ์Šค๋ ˆ๋“œ๋ฅผ ์ค‘๋‹จํ•˜์—ฌ ์ž‘์—…์„ ๊ฐ‘์ž๊ธฐ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค.
  25. ์Šค๋ ˆ๋“œ์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?

  26. ์ด๊ฒƒ์€ ์ข‹์€ ํŠธ๋ฆญ ์งˆ๋ฌธ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, ์˜ˆ์™ธ๊ฐ€ ํฌ์ฐฉ๋˜์ง€ ์•Š์œผ๋ฉด ์Šค๋ ˆ๋“œ๋Š” ์ข…๋ฃŒ๋˜๊ณ , ํฌ์ฐฉ๋˜์ง€ ์•Š์€ ์˜ˆ์™ธ์— ๋Œ€ํ•œ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์„ค์น˜๋˜๋ฉด ์ฝœ๋ฐฑ์„ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. Thread.UncaughtExceptionHandler๋Š” catch๋˜์ง€ ์•Š์€ ์˜ˆ์™ธ๋กœ ์ธํ•ด ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฐ‘์ž๊ธฐ ์ค‘์ง€๋  ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ํ•ธ๋“ค๋Ÿฌ์— ๋Œ€ํ•œ ์ค‘์ฒฉ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ •์˜๋œ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ํฌ์ฐฉ๋˜์ง€ ์•Š์€ ์˜ˆ์™ธ๋กœ ์ธํ•ด ์Šค๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๋ ค๊ณ  ํ•˜๋ฉด JVM์€ Thread.getUncaughtExceptionHandler()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ UncaughtExceptionHandler๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ํ•ธ๋“ค๋Ÿฌ์˜ uncaughtException() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์Šค๋ ˆ๋“œ์™€ ์˜ˆ์™ธ๋ฅผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  27. ๋‘ ์Šค๋ ˆ๋“œ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  28. ๊ณต์œ  ๊ฐ์ฒด๋‚˜ BlockingQueue์™€ ๊ฐ™์€ ๋ณ‘๋ ฌ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šค๋ ˆ๋“œ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  29. ํ†ต์ง€์™€ ํ†ต์ง€All์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  30. ์ด๊ฒƒ์€ ๋˜ ๋‹ค๋ฅธ ๊นŒ๋‹ค๋กœ์šด ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ๋ชจ๋‹ˆํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์— ์˜ํ•ด ๋ชจ๋‹ˆํ„ฐ๋ง๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Java API ๊ฐœ๋ฐœ์ž๋Š” ํ•˜๋‚˜ ๋˜๋Š” ๋ชจ๋“  ์Šค๋ ˆ๋“œ์—๊ฒŒ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ์•Œ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์ง€๋งŒ ๊ตฌํ˜„์˜ ์ ˆ๋ฐ˜๋งŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. inform() ๋ฉ”์†Œ๋“œ์—๋Š” ํŠน์ • ์Šค๋ ˆ๋“œ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์œผ๋ฏ€๋กœ ๋‹จ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋งŒ ๋Œ€๊ธฐ ์ค‘์ž„์„ ํ™•์‹คํžˆ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— informal()์€ ๋ชจ๋“  ์Šค๋ ˆ๋“œ์— ์•Œ๋ฆฌ๊ณ  ๋ชจ๋‹ˆํ„ฐ๋ฅผ ๋‘๊ณ  ๊ฒฝ์Ÿํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ ์ตœ์†Œํ•œ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์•ž์œผ๋กœ ์ด๋™ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  31. Thread ํด๋ž˜์Šค์— wait,notify,notifyAll์ด ์—†๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  32. ์ด๋Š” ํ›„๋ณด์ž๊ฐ€ ๊ธฐ์กด ์‹œ์Šคํ…œ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜๋Š”์ง€ ๋˜๋Š” ์ฒ˜์Œ์—๋Š” ์–ด์šธ๋ฆฌ์ง€ ์•Š๋Š” ๋น„์Šทํ•œ ๊ฒƒ์„ ์ƒ๊ฐํ•ด ๋ณธ ์ ์ด ์žˆ๋Š”์ง€ ํ…Œ์ŠคํŠธํ•˜๋Š” ์„ค๊ณ„ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด ์งˆ๋ฌธ์— ๋Œ€๋‹ตํ•˜๋ ค๋ฉด ์ด๋Ÿฌํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ Object ํด๋ž˜์Šค์—์„œ ๋” ์ž˜ ๊ตฌํ˜„๋˜๊ณ  Thread ํด๋ž˜์Šค์—์„œ๋Š” ๊ตฌํ˜„๋˜์ง€ ์•Š๋Š” ๋ช‡ ๊ฐ€์ง€ ์ด์œ ๋ฅผ ์ œ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋ถ„๋ช…ํ•œ ์ด์œ ๋Š” Java๊ฐ€ ์Šค๋ ˆ๋“œ ์ˆ˜์ค€์ด ์•„๋‹Œ ๊ฐœ์ฒด ์ˆ˜์ค€์—์„œ ์ž ๊ธˆ์„ ์ง€์›ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฐ์ฒด์—๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ํš๋“ํ•˜๋Š” ์ž ๊ธˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์Šค๋ ˆ๋“œ๊ฐ€ ํŠน์ • ์ž ๊ธˆ์„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด ์Šค๋ ˆ๋“œ๋ณด๋‹ค ๊ฐœ์ฒด์—์„œ wait()๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ๋” ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. Thread ํด๋ž˜์Šค์—์„œ wait()๊ฐ€ ์„ ์–ธ๋œ ๊ฒฝ์šฐ ์Šค๋ ˆ๋“œ๊ฐ€ ์–ด๋–ค ์ž ๊ธˆ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š”์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฆ‰, wait, inform, informAll์€ lock ์ˆ˜์ค€์—์„œ ๋™์ž‘ํ•˜๋ฏ€๋กœ lock์€ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋ฏ€๋กœ Object ํด๋ž˜์Šค์—์„œ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด ๋” ํŽธ๋ฆฌํ•˜๋‹ค.
  33. ThreadLocal ๋ณ€์ˆ˜๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  34. ThreadLocal ๋ณ€์ˆ˜๋Š” Java ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŠน๋ณ„ํ•œ ์œ ํ˜•์˜ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ์ƒํƒœ์— ์ƒํƒœ ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์Šค๋ ˆ๋“œ์—๋Š” ThreadLocal ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ƒ์„ฑ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ๊ฐœ์ฒด์— ๋Œ€ํ•ด ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ์„ ๋‹ฌ์„ฑํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ThreadLocal์„ ์‚ฌ์šฉํ•˜์—ฌ SimpleDateFormat์„ ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ํด๋ž˜์Šค์ด๋ฏ€๋กœ ํ˜ธ์ถœ๋งˆ๋‹ค ๋ณ„๋„์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•„์š”ํ•œ ๋กœ์ปฌ ๋ฒ”์œ„์—์„œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ฐ ์Šค๋ ˆ๋“œ์— ๊ณ ์œ ํ•œ ๋ณต์‚ฌ๋ณธ์„ ์ œ๊ณตํ•˜๋ฉด ์ผ์„์ด์กฐ์˜ ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ์งธ, ์ƒˆ๋กœ์šด ๊ณ ์ • ๊ฐœ์ˆ˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’๋น„์‹ผ ๊ฐœ์ฒด์˜ ์ธ์Šคํ„ด์Šค ์ˆ˜๋ฅผ ์ค„์ด๊ณ , ๋‘˜์งธ, ๋™๊ธฐํ™” ๋ฐ ๋ถˆ๋ณ€์„ฑ์„ ์žƒ์ง€ ์•Š๊ณ  ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ์„ ๋‹ฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ ๋กœ์ปฌ ๋ณ€์ˆ˜์˜ ๋˜ ๋‹ค๋ฅธ ์ข‹์€ ์˜ˆ๋Š” ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” Random ๊ฐœ์ฒด์˜ ์ธ์Šคํ„ด์Šค ์ˆ˜๋ฅผ ์ค„์ด๋Š” ThreadLocalRandom ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.
  35. ํ“จ์ฒ˜ํƒœ์Šคํฌ๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

  36. FutureTask๋Š” ๋ณ‘๋ ฌ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ทจ์†Œ ๊ฐ€๋Šฅํ•œ ๋น„๋™๊ธฐ ๊ณ„์‚ฐ์ž…๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค๋Š” ๊ณ„์‚ฐ ์‹œ์ž‘ ๋ฐ ์ค‘์ง€ ๋ฉ”์„œ๋“œ, ๊ณ„์‚ฐ ์ƒํƒœ ์ฟผ๋ฆฌ ๋ฐ ๊ฒฐ๊ณผ ๊ฒ€์ƒ‰ ๋ฉ”์„œ๋“œ๊ฐ€ ํฌํ•จ๋œ ๊ธฐ๋ณธ Future ๊ตฌํ˜„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” ๊ณ„์‚ฐ์ด ์™„๋ฃŒ๋œ ๊ฒฝ์šฐ์—๋งŒ ์–ป์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ณ„์‚ฐ์ด ์•„์ง ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ getter ๋ฉ”์„œ๋“œ๊ฐ€ ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค. FutureTask ๊ฐ์ฒด๋Š” Callable ๋ฐ Runnable ๊ฐ์ฒด๋ฅผ ๋ž˜ํ•‘ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. FutureTask๋Š” Runnable์„ ๊ตฌํ˜„ํ•˜๋ฏ€๋กœ ์‹คํ–‰์„ ์œ„ํ•ด Executor๋กœ ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  37. Interrupted์™€ isInterrupted์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  38. Interrupted()์™€ isInterrupted()์˜ ์ฃผ์š” ์ฐจ์ด์ ์€ ์ „์ž๋Š” ์ธํ„ฐ๋ŸฝํŠธ ์ƒํƒœ๋ฅผ ์žฌ์„ค์ •ํ•˜์ง€๋งŒ ํ›„์ž๋Š” ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Java์˜ ์ธํ„ฐ๋ŸฝํŠธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ์ธํ„ฐ๋ŸฝํŠธ ์ƒํƒœ๋ผ๊ณ  ์•Œ๋ ค์ง„ ๋‚ด๋ถ€ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. Thread.interrupt()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์Šค๋ ˆ๋“œ๋ฅผ ์ค‘๋‹จํ•˜๋ฉด ์ด ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์ค‘๋‹จ๋œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ •์  Thread.interrupted() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ธํ„ฐ๋ŸฝํŠธ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋ฉด ์ธํ„ฐ๋ŸฝํŠธ ์ƒํƒœ๊ฐ€ ์žฌ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ๊ฐ€ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์˜ ์ธํ„ฐ๋ŸฝํŠธ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋น„์ •์  isInterrupted() ๋ฉ”์„œ๋“œ๋Š” ์ธํ„ฐ๋ŸฝํŠธ ํ”Œ๋ž˜๊ทธ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ InterruptedException์„ ๋ฐœ์ƒ์‹œ์ผœ ์ข…๋ฃŒ๋˜๋Š” ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋Š” ์ธํ„ฐ๋ŸฝํŠธ ํ”Œ๋ž˜๊ทธ๋ฅผ ์žฌ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ธํ„ฐ๋ŸฝํŠธ()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ฆ‰์‹œ ๋‹ค์‹œ ์„ค์ •๋  ๊ฐ€๋Šฅ์„ฑ์ด ํ•ญ์ƒ ์žˆ์Šต๋‹ˆ๋‹ค.
  39. ๋™๊ธฐํ™”๋œ ๋ธ”๋ก์—์„œ ๋Œ€๊ธฐ ๋ฐ ์•Œ๋ฆผ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  40. ์ •์  ๋ธ”๋ก์ด๋‚˜ ๋ฉ”์†Œ๋“œ์—์„œ ๋Œ€๊ธฐ ๋ฐ ์•Œ๋ฆผ์„ ํ˜ธ์ถœํ•˜๋Š” ์ฃผ๋œ ์ด์œ ๋Š” Java API์—์„œ ์ด๋ฅผ ์š”๊ตฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋™๊ธฐํ™”๋œ ๋ธ”๋ก ์™ธ๋ถ€์—์„œ ํ˜ธ์ถœํ•˜๋ฉด ์ฝ”๋“œ์—์„œ IllegalMonitorStateException์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋” ์˜๋ฆฌํ•œ ์ด์œ ๋Š” ๋Œ€๊ธฐ ํ˜ธ์ถœ๊ณผ ์•Œ๋ฆผ ํ˜ธ์ถœ ๊ฐ„์˜ ๊ฒฝํ•ฉ ์ƒํƒœ๋ฅผ ํ”ผํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  41. ๋ฃจํ”„์—์„œ ๋Œ€๊ธฐ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  42. ๋Œ€๊ธฐ ์ค‘์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฃจํ”„์—์„œ ๋Œ€๊ธฐ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š์œผ๋ฉด ์ž˜๋ชป๋œ ๊ฒฝ๊ณ  ๋ฐ ์ž˜๋ชป๋œ ๊นจ์šฐ๊ธฐ ํ˜ธ์ถœ์„ ๋ฐ›์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์œผ๋ฉฐ ์ƒํƒœ์— ๋„๋‹ฌํ•˜์ง€ ์•Š๋”๋ผ๋„ ๋‹จ์ˆœํžˆ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ๋Œ€๊ธฐ ์ค‘์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ๊นจ์–ด๋‚  ๋•Œ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋˜ ์ƒํƒœ๊ฐ€ ์—ฌ์ „ํžˆ ์œ ํšจํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ๋Š” ๊ณผ๊ฑฐ์ผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, inform() ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋œ ํ›„ ์Šค๋ ˆ๋“œ๊ฐ€ ๊นจ์–ด๋‚˜๊ธฐ ์ „์— ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฃจํ”„ ๋‚ด์—์„œ wait()๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ํ•ญ์ƒ ๋” ์ข‹์Šต๋‹ˆ๋‹ค.
  43. ๋™๊ธฐํ™”๋œ ์ปฌ๋ ‰์…˜๊ณผ ๋™์‹œ ์ปฌ๋ ‰์…˜์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  44. ๋™๊ธฐํ™”๋œ ์ปฌ๋ ‰์…˜๊ณผ ๋™์‹œ ์ปฌ๋ ‰์…˜ ๋ชจ๋‘ ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•œ ์ปฌ๋ ‰์…˜์„ ์ œ๊ณตํ•˜์ง€๋งŒ ํ›„์ž๊ฐ€ ๋” ํ™•์žฅ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. Java 1.5 ์ด์ „์—๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋™๊ธฐํ™”๋œ ์ปฌ๋ ‰์…˜์—๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ, ์ด๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์•ก์„ธ์Šคํ•  ๋•Œ ๊ฒฝํ•ฉ์˜ ์›์ธ์ด ๋˜์–ด ์‹œ์Šคํ…œ ํ™•์žฅ์„ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. Java 5์—์„œ๋Š” ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ์„ ์ œ๊ณตํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ž ๊ธˆ ์ œ๊ฑฐ ๋ฐ ๋‚ด๋ถ€ ํ…Œ์ด๋ธ” ๋ถ„ํ• ๊ณผ ๊ฐ™์€ ์ตœ์‹  ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์žฅ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ConcurrentHashMap๊ณผ ๊ฐ™์€ ๋™์‹œ ์ปฌ๋ ‰์…˜์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.
  45. ์Šคํƒ๊ณผ ํž™์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  46. ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์— ๋Œ€ํ•œ ์งˆ๋ฌธ์— ์ด ์งˆ๋ฌธ์ด ๋‚˜ํƒ€๋‚˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์Šคํƒ์€ ์Šค๋ ˆ๋“œ์™€ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๊ด€๋œ ๋ฉ”๋ชจ๋ฆฌ ์กฐ๊ฐ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ฐ ์Šค๋ ˆ๋“œ์—๋Š” ์ง€์—ญ ๋ณ€์ˆ˜, ๋ฉ”์„œ๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ ํ˜ธ์ถœ ์Šคํƒ์„ ์ €์žฅํ•˜๋Š” ์ž์ฒด ์Šคํƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ์Šค๋ ˆ๋“œ์˜ ์Šคํƒ์— ์ €์žฅ๋œ ๋ณ€์ˆ˜๋Š” ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์— ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด, ํž™์€ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๊ณตํ†ต ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ž…๋‹ˆ๋‹ค. ๋กœ์ปฌ ์ˆ˜์ค€์ด๋“  ๋‹ค๋ฅธ ์ˆ˜์ค€์ด๋“  ๊ด€๊ณ„์—†์ด ๊ฐœ์ฒด๋Š” ํž™์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์Šค๋ ˆ๋“œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํž™์˜ ๊ฐ’์„ ์Šคํƒ์— ์บ์‹œํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํœ˜๋ฐœ์„ฑ ๋ณ€์ˆ˜๊ฐ€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. Volatile์€ ์Šค๋ ˆ๋“œ์—๊ฒŒ ์ฃผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ณ€์ˆ˜๋ฅผ ์ฝ๋„๋ก ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค.
  47. ์Šค๋ ˆ๋“œ ํ’€์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  48. ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ์‹œ๊ฐ„๊ณผ ๋ฆฌ์†Œ์Šค ์ธก๋ฉด์—์„œ ๋น„์šฉ์ด ๋งŽ์ด ๋“ญ๋‹ˆ๋‹ค. ์š”์ฒญ์ด ์ฒ˜๋ฆฌ๋˜๋Š” ๋™์•ˆ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์‘๋‹ต ์‹œ๊ฐ„์ด ๋Š๋ ค์ง€๊ณ  ํ”„๋กœ์„ธ์Šค๋Š” ์ œํ•œ๋œ ์ˆ˜์˜ ์Šค๋ ˆ๋“œ๋งŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ์‹œ ์Šค๋ ˆ๋“œ ํ’€์ด ์ƒ์„ฑ๋˜๊ณ  ์Šค๋ ˆ๋“œ๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์žฌ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ์Šค๋ ˆ๋“œ ํ’€์„ "์Šค๋ ˆ๋“œ ํ’€"์ด๋ผ๊ณ  ํ•˜๋ฉฐ, ๊ทธ ์•ˆ์— ์žˆ๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ์ž‘์—…์ž ์Šค๋ ˆ๋“œ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. Java 1.5๋ถ€ํ„ฐ Java API๋Š” ๋‹จ์œ„ ์‹œ๊ฐ„๋‹น ํ•˜๋‚˜์˜ ์ž‘์—…๋งŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๋‹จ์ผ ์Šค๋ ˆ๋“œ ํ’€, ๊ณ ์ • ์Šค๋ ˆ๋“œ ํ’€, ๊ณ ์ • ๊ฐœ์ˆ˜์˜ ํ’€ ๋“ฑ ๋‹ค์–‘ํ•œ ์Šค๋ ˆ๋“œ ํ’€์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” Executor ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ, ์บ์‹œ๋œ ์Šค๋ ˆ๋“œ ํ’€, ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ํ’€๋กœ ๋‹จ๊ธฐ ์ž‘์—…์ด ๋งŽ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  49. ์ƒ์‚ฐ์ž ์†Œ๋น„์ž ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  50. ์‹ค์ œ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์Šค๋ ˆ๋“œ ๋ฌธ์ œ๋Š” ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฌธ์ œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋‘ ๋ฒˆ์งธ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฌธ์ œ๋ฅผ ์†Œ๋น„ํ•˜๋Š” ์ƒ์‚ฐ์ž ์†Œ๋น„์ž ํŒจํ„ด์—์„œ ๋น„๋กฏ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ๋‚ด๋ถ€ ์Šค๋ ˆ๋“œ ์ƒํ˜ธ ์ž‘์šฉ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚ฎ์€ ์ˆ˜์ค€์—์„œ๋Š” ๋Œ€๊ธฐ ๋ฐ ์•Œ๋ฆผ ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ๋†’์€ ์ˆ˜์ค€์—์„œ๋Š” Semaphore ๋˜๋Š” BlockingQueue๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  51. ๊ต์ฐฉ์ƒํƒœ๋ฅผ ํ”ผํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  52. ๋ฒˆ์—ญ: ์Šค๋ ˆ๋“œ๋ณ„ ์ƒ์œ„ 50๊ฐœ ์ธํ„ฐ๋ทฐ ์งˆ๋ฌธ.  1๋ถ€. - 1 ๊ต์ฐฉ ์ƒํƒœ๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ๋‘ ๋ฒˆ์งธ ์Šค๋ ˆ๋“œ๊ฐ€ ์–ด๋–ค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๊ณ , ๋‘ ๋ฒˆ์งธ ์Šค๋ ˆ๋“œ๋„ ๋™์‹œ์— ์ฒซ ๋ฒˆ์งธ ์Šค๋ ˆ๋“œ์™€ ๋™์ผํ•œ ์ž‘์—…์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์ •์ง€๋˜์–ด ์˜๋„ํ•œ ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๊ฒŒ ๋งŒ๋“œ๋Š” ๋งค์šฐ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๊ต์ฐฉ ์ƒํƒœ๋Š” ๋‹ค์Œ 4๊ฐ€์ง€ ์ƒํƒœ์— ๋„๋‹ฌํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
    • ์ƒํ˜ธ๋ฐฐ์ œ: ๋ถ„ํ•  ๋ถˆ๊ฐ€ โ€‹โ€‹๋ชจ๋“œ์—์„œ๋Š” ์ตœ์†Œํ•œ ํ•˜๋‚˜์˜ ์ž์›์„ ์ ์œ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์–ด์ง„ ์‹œ๊ฐ„์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ณด๋ฅ˜ ๋ฐ ๋Œ€๊ธฐ: ํ”„๋กœ์„ธ์Šค๋Š” ์ตœ์†Œํ•œ ํ•˜๋‚˜์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณด์œ ํ•˜๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ณด์œ ํ•œ ์ถ”๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
    • ์‚ฌ์ „ ์ •๋ฆฌ ์—†์Œ: ์šด์˜ ์ฒด์ œ๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ์ด๋ฏธ ์ ์œ ๋œ ๊ฒฝ์šฐ ๋ฆฌ์†Œ์Šค๋ฅผ ์žฌํ• ๋‹นํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋ณด๋ฅ˜ ํ”„๋กœ์„ธ์Šค์— ์ž๋ฐœ์ ์œผ๋กœ ์ œ๊ณต๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ์ˆœํ™˜ ๋Œ€๊ธฐ(Cyclic wait): ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ณ , ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋Š” ์ฒซ ๋ฒˆ์งธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.
    ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ํ”ผํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ ๋ฃจํ”„์—์„œ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์„ ํ”ผํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ํŠน์ • ์ˆœ์„œ๋กœ ์ž ๊ธˆ์„ ํš๋“ํ•˜๊ณ  ๋ฐ˜๋Œ€ ์ˆœ์„œ๋กœ ํ•ด์ œํ•จ์œผ๋กœ์จ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  53. ๋ผ์ด๋ธŒ๋ฝ๊ณผ ๊ต์ฐฉ์ƒํƒœ์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

  54. ๋ผ์ด๋ธŒ๋ก์€ ๊ต์ฐฉ ์ƒํƒœ์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋ก์—์„œ๋งŒ ๊ด€๋ จ ์Šค๋ ˆ๋“œ ๋˜๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๊ฐ€ ์„œ๋กœ์— ๋”ฐ๋ผ ์ง€์†์ ์œผ๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. Livelock์€ ์ž์› ๋ถ€์กฑ์˜ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋ก์˜ ์‹ค์ œ ์˜ˆ๋Š” ๋‘ ์‚ฌ๋žŒ์ด ์ข์€ ๋ณต๋„์—์„œ ๋งŒ๋‚˜ ์˜ˆ์˜๋ฅผ ๊ฐ–์ถ”๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๋ฉด์„œ ์˜†์œผ๋กœ ๋ฌผ๋Ÿฌ์„œ์„œ ๋์—†์ด ์ขŒ์šฐ๋กœ ์›€์ง์ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION