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

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

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
์‹ ์ž…์ƒ, ์ˆ™๋ จ๋œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ์œ„ํ•œ ์ƒ์œ„ 50๊ฐ€์ง€ Java ์Šค๋ ˆ๋“œ ์ธํ„ฐ๋ทฐ ์งˆ๋ฌธ ๋‹ต๋ณ€ ์›๋ณธ ๊ธฐ์‚ฌ ๋ฒˆ์—ญ์˜ ๋‘ ๋ฒˆ์งธ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค . ์ฒซ ๋ฒˆ์งธ ๋ถ€๋ถ„.
  1. ์Šค๋ ˆ๋“œ๊ฐ€ ์ž ๊ธˆ์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  2. ์ „ํ™” ์ธํ„ฐ๋ทฐ์—์„œ ์ด ์งˆ๋ฌธ์„ ์ ‘ํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ํ˜„์žฌ ์ž ๊ธˆ์„ ์œ ์ง€ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ „ํ˜€ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค. java.lang.Thread์—๋Š”holdLock() ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ์œผ๋ฉฐ, ํ˜„์žฌ ์Šค๋ ˆ๋“œ๊ฐ€ ํŠน์ • ๊ฐ์ฒด์— ๋Œ€ํ•œ ๋ชจ๋‹ˆํ„ฐ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ true๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  3. ์Šค๋ ˆ๋“œ ๋คํ”„๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  4. ์Šค๋ ˆ๋“œ ๋คํ”„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์Šค๋ ˆ๋“œ๊ฐ€ ํ˜„์žฌ ์ˆ˜ํ–‰ ์ค‘์ธ ์ž‘์—…์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šด์˜ ์ฒด์ œ์— ๋”ฐ๋ผ ์Šค๋ ˆ๋“œ ๋คํ”„๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Windows์—์„œ๋Š” ctrl + Break ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , Linux์—์„œ๋Š” kill -3 ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. jstack ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ”„๋กœ์„ธ์Šค ID์—์„œ ์ž‘๋™ํ•˜๋ฉฐ ๋‹ค๋ฅธ jps ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  5. ์Šค๋ ˆ๋“œ์˜ ์Šคํƒ ํฌ๊ธฐ๋ฅผ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๋ฐ ์‚ฌ์šฉ๋˜๋Š” JVM ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  6. ์ด๋Š” Java์—์„œ ์Šค๋ ˆ๋“œ ์Šคํƒ์˜ ํฌ๊ธฐ๋ฅผ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ„๋‹จํ•œ -Xss ๋งค๊ฐœ๋ณ€์ˆ˜ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.
  7. ๋™๊ธฐํ™”์™€ ReentrantLock์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  8. ์ƒํ˜ธ ๋ฐฐ์ œ๋ฅผ ๋‹ฌ์„ฑํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ๋™๊ธฐํ™”๋œ ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•˜๋Š” ๊ฒƒ์ด์—ˆ์ง€๋งŒ ๋ฉ”์„œ๋“œ๋‚˜ ์ฝ”๋“œ ๋ธ”๋ก ์ด์ƒ์œผ๋กœ ์ž ๊ธˆ์„ ํ™•์žฅํ•  ์ˆ˜ ์—†๋Š” ๋“ฑ ๋ช‡ ๊ฐ€์ง€ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Java 5๋Š” Lock ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋ณด๋‹ค ์„ธ๋ถ€์ ์ธ ์ œ์–ด๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ReentrantLock์€ ์•”์‹œ์  ๋ชจ๋‹ˆํ„ฐ์™€ ๋™์ผํ•œ ๊ธฐ๋ณธ ๋™์ž‘ ๋ฐ ์˜๋ฏธ ์ฒด๊ณ„๋ฅผ ๊ฐ–์ถ˜ ์ž ๊ธˆ์„ ์ œ๊ณตํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ์ž ๊ธˆ ๊ตฌํ˜„์œผ๋กœ, ๋™๊ธฐํ™”๋œ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ฌ์„ฑ๋˜์ง€๋งŒ ํ–ฅ์ƒ๋œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  9. 3๊ฐœ์˜ ์Šค๋ ˆ๋“œ T1, T2 ๋ฐ T3์ด ์ฃผ์–ด์ง€๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ์‹œํ€€์Šค T1, T2, T3์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  10. ์ผ๊ด€์„ฑ์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰์„ ๋งˆ์ณค์„ ๋•Œ ๊ฐ„๋‹จํžˆ Join() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šค๋ ˆ๋“œ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์–ด์ง„ ์‹œํ€€์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ๋งˆ์ง€๋ง‰ ์Šค๋ ˆ๋“œ๋ฅผ ๋จผ์ € ์‹œ์ž‘ํ•œ ๋‹ค์Œ Join() ๋ฉ”์„œ๋“œ๋ฅผ ์—ญ์ˆœ์œผ๋กœ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, T3๋Š” T2.join์„ ํ˜ธ์ถœํ•˜๊ณ  T2๋Š” T1.join์„ ํ˜ธ์ถœํ•˜๋ฏ€๋กœ T1์ด ๋จผ์ € ์™„๋ฃŒ๋˜๊ณ  T3์ด ๋งˆ์ง€๋ง‰์— ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค. .
  11. ํ•ญ๋ณต ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์„ ํ•ฉ๋‹ˆ๊นŒ?

  12. ์–‘๋ณด ๋ฐฉ๋ฒ•์€ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ์Šค๋ ˆ๋“œ์— CPU๋ฅผ ํฌ๊ธฐํ•˜๋„๋ก ์š”์ฒญํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ •์  ๋ฐฉ๋ฒ•์ด๋ฉฐ ํ˜„์žฌ ์Šค๋ ˆ๋“œ๊ฐ€ ํ”„๋กœ์„ธ์„œ๋ฅผ ํฌ๊ธฐํ•˜๋„๋ก ๋ณด์žฅํ•  ๋ฟ, ์–ด๋Š ์Šค๋ ˆ๋“œ ์‹คํ–‰์œผ๋กœ ์ด๋™ํ• ์ง€๋Š” ๊ฒฐ์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  13. ConcurrentHashMap์˜ ๋™์‹œ์„ฑ ์ˆ˜์ค€์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  14. ConcurrentHashMap์€ ์‹ค์ œ ๋งต์„ ์„น์…˜์œผ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ํ™•์žฅ์„ฑ๊ณผ ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ์„ ๋‹ฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ถ„๋ฆฌ๋Š” ๋ณ‘๋ ฌ์„ฑ ์ˆ˜์ค€์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ConcurrentHashMap ์ƒ์„ฑ์ž์˜ ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜์ด๋ฉฐ ๊ธฐ๋ณธ๊ฐ’์€ 16์ž…๋‹ˆ๋‹ค.
  15. ์„ธ๋งˆํฌ์–ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  16. ์„ธ๋งˆํฌ์–ด๋Š” ์ƒˆ๋กœ์šด ์œ ํ˜•์˜ ๋™๊ธฐํ™” ์žฅ์น˜์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์นด์šดํ„ฐ๊ฐ€ ์žˆ๋Š” ์„ธ๋งˆํฌ์–ด์ž…๋‹ˆ๋‹ค. ๊ฐœ๋…์ ์œผ๋กœ ์„ธ๋งˆํฌ์–ด๋Š” ์ผ๋ จ์˜ ๊ถŒํ•œ์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ๊ฐ acquire()๋Š” ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ถŒํ•œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ์ „์— ์ฐจ๋‹จํ•œ ๋‹ค์Œ ์ด๋ฅผ ํš๋“ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ release()๋Š” ๊ถŒํ•œ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ž ์žฌ์ ์œผ๋กœ ์ฐจ๋‹จ ํš๋“์ž๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ์‹ค์ œ ๊ถŒํ•œ ๊ฐœ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„ธ๋งˆํฌ์–ด๋Š” ๋‹จ์ˆœํžˆ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ผ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์„ธ๋งˆํฌ์–ด๋Š” ํ’€๋ง๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ๊ณผ ๊ฐ™์ด ์ œํ•œ๋œ ์ˆ˜๋Ÿ‰์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฐ’๋น„์‹ผ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  17. ์Šค๋ ˆ๋“œ ํ’€ ๋Œ€๊ธฐ์—ด์ด ์ด๋ฏธ ๊ฐ€๋“ ์ฐจ์„œ ์ž‘์—…์„ ์ œ์ถœํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?

  18. ์Šค๋ ˆ๋“œ ํ’€ ๋Œ€๊ธฐ์—ด์ด ๊ฐ€๋“ ์ฐจ๋ฉด ์ œ์ถœ๋œ ์ž‘์—…์ด "๊ฑฐ๋ถ€"๋ฉ๋‹ˆ๋‹ค. ThreadPoolExecutor์˜ submit() ๋ฉ”์†Œ๋“œ๋Š” RejectedExecutionException์„ ๋ฐœ์ƒ์‹œํ‚จ ํ›„ RejectedExecutionHandler๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
  19. ์Šค๋ ˆ๋“œ ํ’€์—์„œ submit()๊ณผ excute() ๋ฉ”์†Œ๋“œ์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  20. ๋‘ ๋ฐฉ๋ฒ• ๋ชจ๋‘ ์Šค๋ ˆ๋“œ ํ’€์— ์ž‘์—…์„ ์ œ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์ด์ง€๋งŒ ์•ฝ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Execute(Runnable ๋ช…๋ น)๋Š” Executor ์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ ์•ž์œผ๋กœ ์ฃผ์–ด์ง„ ์ž‘์—…์„ ์‹คํ–‰ํ•˜์ง€๋งŒ ๋” ์ค‘์š”ํ•œ ๊ฒƒ์€ ์•„๋ฌด๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด submit()์€ ์˜ค๋ฒ„๋กœ๋“œ๋œ ๋ฉ”์„œ๋“œ๋กœ, Runnable ๋ฐ Callable ์ž‘์—…์„ ํ—ˆ์šฉํ•˜๊ณ  ์‹คํ–‰์„ ์ทจ์†Œํ•˜๊ฑฐ๋‚˜ ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Future ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฉ”์†Œ๋“œ๋Š” Executor ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•˜๋Š” ExecutorService ์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ ThreadPoolExecutor ๋˜๋Š” ScheduledThreadPoolExecutor์™€ ๊ฐ™์€ ๊ฐ ์Šค๋ ˆ๋“œ ํ’€ ํด๋ž˜์Šค๋Š” ์ด๋Ÿฌํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์†ํ•ฉ๋‹ˆ๋‹ค.
  21. ์ฐจ๋‹จ ๋ฐฉ๋ฒ•์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  22. ์ฐจ๋‹จ ๋ฉ”์„œ๋“œ๋Š” ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์ฐจ๋‹จํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ServerSocket accept() ๋ฉ”์„œ๋“œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ฒฐ๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฐจ๋‹จ์ด๋ž€ ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์ œ์–ด๊ฐ€ ํ˜ธ์ถœ ๋ฉ”์„œ๋“œ๋กœ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— ์ž‘์—…์ด ์™„๋ฃŒ๋˜๊ธฐ ์ „์— ์™„๋ฃŒ๋˜๋Š” ๋น„๋™๊ธฐ์‹ ๋˜๋Š” ๋น„์ฐจ๋‹จ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  23. ์Šค์œ™ ์Šค๋ ˆ๋“œ๋Š” ์•ˆ์ „ํ•œ๊ฐ€์š”?

  24. ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, Swing์€ ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฉด์ ‘๊ด€์ด ๋ฌป์ง€ ์•Š๋”๋ผ๋„ ๊ทธ๊ฒƒ์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋ฅผ ์„ค๋ช…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Swing์ด ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค๊ณ  ๋งํ•  ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ Swing์€ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์— ์˜ํ•ด ์ˆ˜์ •๋  ์ˆ˜ ์—†๋Š” ๊ตฌ์„ฑ์š”์†Œ๋ผ๋Š” ์‚ฌ์‹ค์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค. GUI ๊ตฌ์„ฑ์š”์†Œ์— ๋Œ€ํ•œ ๋ชจ๋“  ๋ณ€๊ฒฝ์€ AWT ์Šค๋ ˆ๋“œ์—์„œ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•˜๋ฉฐ Swing์€ ๊ทธ๋Ÿฌํ•œ ๋ณ€๊ฒฝ์„ ์˜ˆ์•ฝํ•˜๊ธฐ ์œ„ํ•œ ๋™๊ธฐ์‹ ๋ฐ ๋น„๋™๊ธฐ์‹ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  25. InvokeAndWait์™€ InvokeLater์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  26. ์ด๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๋ฒคํŠธ ๊ด€๋ฆฌ์ž ์Šค๋ ˆ๋“œ๊ฐ€ ์•„๋‹Œ ์Šค๋ ˆ๋“œ์—์„œ GUI ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ Swing API ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. InvokeAndWait()๋Š” ์ง„ํ–‰๋ฅ  ํ‘œ์‹œ์ค„๊ณผ ๊ฐ™์€ GUI ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋™๊ธฐ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ์ง„ํ–‰๋ฅ ์ด ์ด๋ฃจ์–ด์งˆ ๋•Œ๋งˆ๋‹ค ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜๋„๋ก ํ‘œ์‹œ์ค„์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ ์ง„ํ–‰ ์ƒํ™ฉ์„ ์ถ”์ ํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•œ ์ด๋ฒคํŠธ ๋””์ŠคํŒจ์ฒ˜ ์Šค๋ ˆ๋“œ๋ฅผ ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•ด InvokeAndWait()๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  informaLater()๋Š” ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•œ ๋น„๋™๊ธฐ ํ˜ธ์ถœ์ž…๋‹ˆ๋‹ค.
  27. ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•œ Swing API ๋ฉ”์†Œ๋“œ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  28. ์ด ์งˆ๋ฌธ์€ ๋‹ค์‹œ Swing๊ณผ ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Swing ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜์ง€ ์•Š์ง€๋งŒ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. repaint() ๋ฐ revalidate()๊ฐ€ ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ JTextComponent์˜ setText() ๋ฐ JTextArea์˜ insert() ๋ฐ Append() ๋ฉ”์†Œ๋“œ์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ Swing ๊ตฌ์„ฑ์š”์†Œ์— ๋‹ค๋ฅธ ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  29. ๋ถˆ๋ณ€ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  30. ์ด ์งˆ๋ฌธ์€ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ๋ฐ ๋™์‹œ์„ฑ๊ณผ ๊ด€๋ จ์ด ์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๋ถˆ๋ณ€์„ฑ์€ ์ด๋ฏธ ๋ณต์žกํ•œ ๋ณ‘๋ ฌ ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๋ถˆ๋ณ€ ๊ฐ์ฒด๋Š” ๋™๊ธฐํ™” ์—†์ด ์ „ํŒŒ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋งค์šฐ ๋น„์šฉ์ด ๋งŽ์ด ๋“ญ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํ•˜๊ฒŒ๋„ Java์—๋Š” ๊ฐ์ฒด๋ฅผ ๋ถˆ๋ณ€์œผ๋กœ ๋งŒ๋“œ๋Š” @Immutable ์ฃผ์„์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์—ด์‹ฌํžˆ ๋…ธ๋ ฅํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ถˆ๋ณ€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ์ƒ์„ฑ์ž ์ดˆ๊ธฐํ™”, ์„ค์ •์ž ์—†์Œ, ์ฐธ์กฐ ๋ˆ„์ถœ ์—†์Œ, ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ ๊ฐ์ฒด์˜ ๋ณ„๋„ ๋ณต์‚ฌ๋ณธ ์ €์žฅ ๋“ฑ ๊ธฐ๋ณธ ์‚ฌํ•ญ์„ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  31. ReadWriteLock์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  32. ์ผ๋ฐ˜์ ์œผ๋กœ ReadWriteLock์€ ๋ณ‘๋ ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ž ๊ธˆ ๊ตฌ๋ฌธ ๋ถ„์„ ๊ธฐ์ˆ ์˜ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค. ์ด๋Š” Java 5์— ์ถ”๊ฐ€๋œ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ํ•œ ์Œ์˜ ๊ด€๋ จ ์ž ๊ธˆ(์ฝ๊ธฐ ์ž‘์—…์šฉ, ์“ฐ๊ธฐ ์ž‘์—…์šฉ)์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํŒ๋…๊ธฐ ์ž ๊ธˆ์€ ์ž‘์„ฑ์ž๊ฐ€ ์—†์„ ๋•Œ๊นŒ์ง€ ์—ฌ๋Ÿฌ ์ฝ๊ธฐ ์Šค๋ ˆ๋“œ์— ์˜ํ•ด ๋™์‹œ์— ์œ ์ง€๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์“ฐ๊ธฐ ์ž ๊ธˆ์€ ๋…์ ์ ์ž…๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๊ฒฝ์šฐ ๊ทœ์น™ ์„ธํŠธ๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ์ตœ๋Œ€ 65535๊ฐœ์˜ ์žฌ๊ท€ ์“ฐ๊ธฐ ์ž ๊ธˆ๊ณผ 65535๊ฐœ์˜ ์ฝ๊ธฐ ์ž ๊ธˆ์„ ์ง€์›ํ•˜๋Š” ReentrantReadWriteLock์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  33. ๋น„์ง€ ์Šคํ•€์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  34. Busy Spin์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํŠน์ • ์กฐ๊ฑด์—์„œ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ•์ œ๋กœ ๋Œ€๊ธฐ์‹œํ‚ค๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์„œ ์ œ์–ด๊ถŒ์„ ์–‘๋„ํ•˜๋Š” ์ „ํ†ต์ ์ธ ๋ฐฉ๋ฒ•์ธ wait(), sleep() ๋˜๋Š” Yield()์™€ ๋‹ฌ๋ฆฌ ์ด ๋ฐฉ๋ฒ•์€ ํ”„๋กœ์„ธ์„œ๋ฅผ ์–‘๋„ํ•˜์ง€ ์•Š๊ณ  ๋‹จ์ˆœํžˆ ๋นˆ ๋ฃจํ”„๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์™œ ์ด๋Ÿฐ ์ผ์„ ํ•˜๊ฒ ์Šต๋‹ˆ๊นŒ? ํ”„๋กœ์„ธ์„œ ์บ์‹œ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ฉ€ํ‹ฐ ์ฝ”์–ด ์‹œ์Šคํ…œ์—์„œ๋Š” ์ผ์‹œ ์ค‘๋‹จ๋œ ์Šค๋ ˆ๋“œ๊ฐ€ ๋‹ค๋ฅธ ์ฝ”์–ด์—์„œ ๊ณ„์† ์‹คํ–‰๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Š” ์บ์‹œ ์žฌ๊ตฌ์ถ•์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ์žฌ๊ตฌ์ถ•์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ๋ฐ”์œ ์Šคํ•€์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.
  35. ํœ˜๋ฐœ์„ฑ ๋ณ€์ˆ˜์™€ ์›์ž ๋ณ€์ˆ˜์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  36. ์ด๊ฒƒ์€ ๋งค์šฐ ํฅ๋ฏธ๋กœ์šด ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ํœ˜๋ฐœ์„ฑ ๋ฐ ์›์ž ๋ณ€์ˆ˜๊ฐ€ ๋งค์šฐ ์œ ์‚ฌํ•ด ๋ณด์ด์ง€๋งŒ ์—ฌ์ „ํžˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. Volatile ๋ณ€์ˆ˜๋Š” ํ›„์† ์“ฐ๊ธฐ ์ „์— ์“ฐ๊ธฐ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ์‚ฌ์ „ ๋ฐœ์ƒ ๋ณด์žฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ ์›์ž์„ฑ์„ ๋ณด์žฅํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, count++ ์—ฐ์‚ฐ์€ ๋‹จ์ˆœํžˆ count๊ฐ€ ํœ˜๋ฐœ์„ฑ์œผ๋กœ ์„ ์–ธ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์›์ž์„ฑ์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— AtomicInteger ํด๋ž˜์Šค๋Š” ์ด๋Ÿฌํ•œ ๋ณต์žกํ•œ ์ž‘์—…์„ ์›์ž์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ์›์ž ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด getAndIncrement()๋Š” ์ฆ๊ฐ€ ์—ฐ์‚ฐ์ž๋ฅผ ์›์ž์ ์œผ๋กœ ๋Œ€์ฒดํ•˜๋ฏ€๋กœ ํ˜„์žฌ ๊ฐ’์„ ์›์ž์ ์œผ๋กœ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์œ ํ˜•์— ๋Œ€ํ•œ ์›์ž ๋ฒ„์ „๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  37. ์Šค๋ ˆ๋“œ๊ฐ€ ๋™๊ธฐํ™”๋œ ๋ธ”๋ก์—์„œ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ฉ๋‹ˆ๊นŒ?

  38. ์ด๊ฒƒ์€ ์ผ๋ฐ˜ Java ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ฅผ ์œ„ํ•œ ๋˜ ๋‹ค๋ฅธ ํŠธ๋ฆญ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์‹คํ–‰์„ ์™„๋ฃŒํ•˜๊ฑฐ๋‚˜ ๊ฐ‘์ž๊ธฐ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ๋™๊ธฐํ™”๋œ ๋ธ”๋ก์„ ์ข…๋ฃŒํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๊ด€๊ณ„์—†์ด ์Šค๋ ˆ๋“œ๋Š” ๋™๊ธฐํ™”๋œ ๋ธ”๋ก์— ๋“ค์–ด๊ฐˆ ๋•Œ ํš๋“ํ•œ ์ž ๊ธˆ์„ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ผ๋ฐ˜์ ์œผ๋กœ finally ๋ธ”๋ก์—์„œ ์ž ๊ธˆ์„ ํ•ด์ œํ•˜์—ฌ ์ž ๊ธˆ์„ ํ•ด์ œํ•  ๋•Œ ํŠน๋ณ„ํ•œ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ณด๋‹ค ๋™๊ธฐํ™”๋œ ์ž ๊ธˆ ๋ธ”๋ก์„ ์„ ํ˜ธํ•˜๋Š” ์ด์œ  ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.
  39. ์‹ฑ๊ธ€ํ†ค์˜ ์ด์ค‘ ํ™•์ธ ์ž ๊ธˆ์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

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

  42. ์ด ์งˆ๋ฌธ์€ ์ด์ „ ์งˆ๋ฌธ์„ ๋ณด์™„ํ•ฉ๋‹ˆ๋‹ค. ์ด์ค‘ ํ™•์ธ ์ž ๊ธˆ์ด ๋งˆ์Œ์— ๋“ค์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋งํ•˜๋ฉด ๋ฉด์ ‘๊ด€์€ ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•œ ์‹ฑ๊ธ€ํ†ค์„ ๋งŒ๋“œ๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์งˆ๋ฌธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํด๋ž˜์Šค ๋กœ๋”ฉ ๋ฐ ์ •์  ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™” ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ์‹ฑ๊ธ€ํ†ค์„ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๊ฑฐ๋‚˜ ๊ฐ•๋ ฅํ•œ ์—ด๊ฑฐํ˜• ์œ ํ˜•์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  43. ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋”ฐ๋ฅด๋Š” ์„ธ ๊ฐ€์ง€ ๊ด€์Šต์„ ๋‚˜์—ดํ•ด ๋ณด์„ธ์š”.

  44. ์„ฑ๋Šฅ, ๋””๋ฒ„๊น… ๋ฐ ์ง€์›์— ๋„์›€์ด ๋˜๋Š” ๋ณ‘๋ ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๋”ฐ๋ผ์•ผ ํ•  ํŠน์ • ๊ทœ์น™์ด ์žˆ๋‹ค๊ณ  ๋ฏฟ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ์ œ๊ฐ€ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋ชจ๋“  Java ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” 3๊ฐ€์ง€ ์ตœ๊ณ ์˜ ๊ทœ์น™์ž…๋‹ˆ๋‹ค.
    • ํ•ญ์ƒ ์Šค๋ ˆ๋“œ์— ์˜๋ฏธ ์žˆ๋Š” ์ด๋ฆ„์„ ์ง€์ •ํ•˜์„ธ์š”.
    • ๋ณ‘๋ ฌ ์ฝ”๋“œ์—์„œ ๋ฒ„๊ทธ๋ฅผ ์ฐพ๊ฑฐ๋‚˜ ์˜ˆ์™ธ๋ฅผ ์ถ”์ ํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์†Œ ์–ด๋ ค์šด ์ž‘์—…์ž…๋‹ˆ๋‹ค. OrderProcessor, QuoteProcessor ๋˜๋Š” TradeProcessor๋Š” Thread-1๋ณด๋‹ค ํ›จ์”ฌ ๋‚ซ์Šต๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ-2 ๋ฐ ์Šค๋ ˆ๋“œ-3. ์ด๋ฆ„์€ ์Šค๋ ˆ๋“œ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์„ ๋ฐ˜์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์ฃผ์š” ํ”„๋ ˆ์ž„์›Œํฌ์™€ ์‹ฌ์ง€์–ด JDK๋„ ์ด ๊ทœ์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
    • ์ฐจ๋‹จ ๋ฐฉ์ง€ ๋˜๋Š” ๋™๊ธฐํ™” ๋ฒ”์œ„ ์ค„์ด๊ธฐ
    • ์ฐจ๋‹จ์—๋Š” ๋น„์šฉ์ด ๋งŽ์ด ๋“ค๊ณ  ์ปจํ…์ŠคํŠธ ์ „ํ™˜์—๋Š” ํ›จ์”ฌ ๋” ๋งŽ์€ ๋น„์šฉ์ด ๋“ญ๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ํ•œ ๋™๊ธฐํ™” ๋ฐ ์ฐจ๋‹จ์„ ํ”ผํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์ค‘์š”ํ•œ ์„น์…˜์ด ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์œผ๋กœ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ์‹œ๊ฐ„ ์ œํ•œ ๋ฐฉ๋ฒ•๋ณด๋‹ค ์‹œ๊ฐ„ ์ œํ•œ ๋ฐฉ๋ฒ•์„ ์„ ํ˜ธํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ์ฐจ๋‹จ ๋ฒ”์œ„๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
    • ๋™๊ธฐํ™” ์žฅ์น˜์™€ ๋Œ€๊ธฐ ๋ฐ ์•Œ๋ฆผ ์‚ฌ์ด์—์„œ ๋™๊ธฐํ™” ์žฅ์น˜๋ฅผ ์„ ํƒํ•˜์„ธ์š”
    • ์ฒซ์งธ, CountDownLatch, Semaphore, CyclicBarrier ๋˜๋Š” Exchanger์™€ ๊ฐ™์€ ๋™๊ธฐํ™” ์žฅ์น˜๋Š” ์ฝ”๋”ฉ์„ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๊ธฐ ๋ฐ ์•Œ๋ฆผ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์žกํ•œ ์ œ์–ด ํ๋ฆ„์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๋‘˜์งธ, ์ด๋Ÿฌํ•œ ํด๋ž˜์Šค๋Š” ์—…๊ณ„ ์ตœ๊ณ ์˜ ์ „๋ฌธ๊ฐ€๊ฐ€ ์ž‘์„ฑํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋ฉฐ ํ–ฅํ›„ JDK ๋ฆด๋ฆฌ์Šค์—์„œ๋Š” ์ตœ์ ํ™”๋˜๊ฑฐ๋‚˜ ๋” ๋‚˜์€ ์ฝ”๋“œ๋กœ ๋Œ€์ฒด๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ๊ณ ๊ธ‰ ๋™๊ธฐํ™” ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์ด์ ์„ ์ž๋™์œผ๋กœ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋™์‹œ์ˆ˜์ง‘๊ณผ ๋™๊ธฐํ™”์ˆ˜์ง‘ ์ค‘ ๋™์‹œ์ˆ˜์ง‘ ์„ ํƒ
    • ์ด๊ฒƒ์€ ๋”ฐ๋ฅด๊ธฐ ์‰ฝ๊ณ  ํ˜œํƒ์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ๊ฐ„๋‹จํ•œ ๊ทœ์น™์ž…๋‹ˆ๋‹ค. ๋™์‹œ ์ปฌ๋ ‰์…˜์€ ๋™๊ธฐํ™”๋œ ์ปฌ๋ ‰์…˜๋ณด๋‹ค ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚˜๋ฏ€๋กœ ๋ณ‘๋ ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์Œ์— ์ง€๋„๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋Š” Hashtable์„ ์ƒ๊ฐํ•˜๊ธฐ ์ „์— ConcurrentHashMap์„ ์ƒ๊ฐํ•ด ๋ณด์„ธ์š”.
  45. ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ•์ œ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  46. ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์„ ๊ฐ•์ œ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, ๋ฌผ๋ก  System.gc()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์•„๋ฌด ๊ฒƒ๋„ ๋ณด์žฅํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. Java์—์„œ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ•์ œ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ „ํ˜€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์Šค๋ ˆ๋“œ ์Šค์ผ€์ค„๋Ÿฌ์— ์˜ํ•ด ์ œ์–ด๋˜๋ฉฐ Java๋Š” ์ด๋ฅผ ์ œ์–ดํ•  API๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Java์˜ ์ด ๋ถ€๋ถ„์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ž„์˜์ ์ž…๋‹ˆ๋‹ค.
  47. Fork/Join ํ”„๋ ˆ์ž„์›Œํฌ๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  48. JDK 7์— ๋„์ž…๋œ Fork/Join ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ตœ์‹  ์„œ๋ฒ„์˜ ๋‹ค์ค‘ ํ”„๋กœ์„ธ์„œ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฐ•๋ ฅํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ž‘์€ ์ž…์ž๋กœ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ถ„ํ•ด๋  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์„ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชฉํ‘œ๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ปดํ“จํŒ… ์„ฑ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์„ ๋†’์ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ค‘์š”ํ•œ ์žฅ์  ์ค‘ ํ•˜๋‚˜๋Š” ์ž‘์—… ๋„์šฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜(์ž‘์—… - ์ž‘์—… ๋ฐ ๋„์šฉ - ๋„์šฉ)์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž‘์—…์ด ๋ถ€์กฑํ•œ ์ž‘์—…์ž ์Šค๋ ˆ๋“œ๋Š” ์—ฌ์ „ํžˆ ์‚ฌ์šฉ ์ค‘์ธ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ ์ž‘์—…์„ ํ›”์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  49. wait() ํ˜ธ์ถœ๊ณผ sleep() ํ˜ธ์ถœ์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  50. ๋Œ€๊ธฐ ๋ฐ ์ ˆ์ „ ๋ชจ๋“œ๋Š” ๋ชจ๋‘ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ผ์ข…์˜ ์ผ์‹œ ์ค‘์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด์ง€๋งŒ ์„œ๋กœ ๋‹ค๋ฅธ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š” ์žฅ์น˜์ž…๋‹ˆ๋‹ค. ๋Œ€๊ธฐ๋Š” ๋‚ด๋ถ€ ์Šค๋ ˆ๋“œ ํ†ต์‹ ์— ์‚ฌ์šฉ๋˜๋ฉฐ, ๋Œ€๊ธฐ ์กฐ๊ฑด์ด true์ด๋ฉด ์ž ๊ธฐ๊ณ , ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์˜ ์ž‘์—…์œผ๋กœ ์ธํ•ด ๋Œ€๊ธฐ ์กฐ๊ฑด์ด false๊ฐ€ ๋˜๋ฉด ์•Œ๋ฆผ์„ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— sleep() ๋ฉ”์„œ๋“œ๋Š” ๋‹จ์ˆœํžˆ ํ”„๋กœ์„ธ์„œ๋ฅผ ํฌ๊ธฐํ•˜๊ฑฐ๋‚˜ ์ง€์ •๋œ ์‹œ๊ฐ„ ๋™์•ˆ ํ˜„์žฌ ์Šค๋ ˆ๋“œ์˜ ์‹คํ–‰์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค. sleep()์„ ํ˜ธ์ถœํ•ด๋„ ํ˜„์žฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ณด์œ ํ•œ ์ž ๊ธˆ์ด ํ•ด์ œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION