Java Plus thread network - accidentlywoo/sec GitHub Wiki

Java Plus thread network

Thread ๋“ค์–ด๊ฐ€๊ธฐ

์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜

  • ํ”„๋กœ์„ธ์Šค : ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด ์‹คํ–‰๋œ ์ƒํƒœ
  • ์Šค๋ ˆ๋“œ : ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ž‘์—…๋‹จ์œ„

์‚ฌ์šฉ์ž ์ •์˜ ์Šค๋ ˆ๋“œ ์ž‘์„ฑ๋ฐฉ๋ฒ•

  1. java.lang.Thread๋กœ ์ƒ์†๋ฐ›๊ธฐ
  2. ์Šค๋ ˆ๋“œ๊ฐ€ ํ• ์ผ์€ run()๋ฉ”์„œ๋“œ์— ์žฌ์ •์˜ ํ•œ๋‹ค.
  • <<interface>>Runnable +run():void

  • java.lang.Thread

-run():void

-start():void

์Šค๋ ˆ๋“œ ์‹œ์ž‘์€ ๋ฐ˜๋“œ์‹œ start() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.

Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„์ฒด๋Š”, Threadํด๋ž˜์Šค์˜ Runnable ๊ตฌํ˜„์ฒด๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ฐ–๋Š” ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•œ๋‹ค.

JVM Thread Scheduling

java.lang.Thread ์˜ start() ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์‹œ Stack ์˜์—ญ์— Thread Scheduler์—์˜ํ•ด Runnable์ƒํƒœ๋กœ ๊ฐ์ฒด ์ด๋™ํ•œ๋‹ค.Thread Scheduling๋จ

Runnable์˜์—ญ์—์„œ๋Š” ์šฐ์„ ์ˆœ์œ„(JVM์€ Thread๋ฅผ Priority๋ฐฉ์‹๊ณผ Round-Robin๋ฐฉ์‹์„ ์‚ฌ์šฉ)๋กœ์— ๋”ฐ๋ผ ์Œ“์ธ๋‹ค. ์šฐ์„ ์ˆœ์œ„ ๋‚ด๋ถ€์—์„  Queue์ž๋ฃŒ๊ตฌ์กฐ๋กœ ์Œ“์ธ๋‹ค.

์ˆœ์„œ๊ฐ€ ๋˜์„œ Run์ƒํƒœ๋กœ ๋“ค์–ด์˜ฌ๋•Œ, java.lang.Thread run() ์ด ํ˜ธ์ถœ๋œ๋‹ค. : CPU์ ์œ ์ƒํƒœ : CPU์ ์œ ๋Š” OS์™€ CPU์—๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค. Runnable๊ณผ Run ๋ฉ”์„œ๋“œ๋ฅผ ์™”๋‹ค๊ฐ”๋‹ค ํ•  ์ˆ˜ ์žˆ๋‹ค.(ex>Time Slicing)

Run์ƒํƒœ์—์„œ ๋ชจ๋“  ์ฒ˜๋ฆฌ๋ฅผ ์™„๋ฃŒํ–ˆ์„ ๋•Œ(run()์ข…๋ฃŒ), Dead ์ƒํƒœ๋กœ ์ด๋™ํ•œ๋‹ค. ๊ฐ์ฒด๋Š” ๋ณด์ „๋˜๊ณ  Thread Scheduling์—์„œ ๋ฒ—์–ด๋‚œ๋‹ค.

wait(), notify() ๋“ค

Object์—์„œ ์„ ์–ธ๋œ Method ๋“ค์ด๋‹ค. wait()๋Š”

  • wait(milliSeconds,..) : milliSeconds๋งŒํผ ํ˜„์žฌ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ผ์‹œ์ค‘์ง€
  • wait() : ํ˜„์žฌ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ผ์‹œ ์ค‘์ง€์‹œํ‚ค๊ณ , ๊ณต์œ ์ž์›์„ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ Thread๊ฐ€ ์ผ์‹œ์ค‘์ง€๋œ ์“ฐ๋ ˆ๋“œ๋ฅผ notify()๋ฅผ ํ˜ธ์ถœํ•ด์ค˜์•ผ Runnable์ƒํƒœ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

wait()์ƒํƒœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ด๋ฉด, notify()๋กœ runnable์ƒํƒœ๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ์“ฐ๋ ˆ๋“œ์˜ ์ˆœ์„œ๋Š” Queue๊ตฌ์กฐ์ธ๊ฒƒ๊ฐ™๋‹ค.(๋ช…์‹œ๋Š” ์•ˆํ–ˆ์ง€๋งŒ FIFO์ด๋‹ค)

wait(), notify() ๋Š” synchronozed๊ตฌ๋ฌธ ๋‚ด์—์„œ ์‚ฌ์šฉ๋œ๋‹ค. -> ๊ณต์œ  ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Thread์—ฌ์•ผ ํ•œ๋‹ค.

Vector / HashTable

Vector - ArrayList ๋Š” List์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ์ฝœ๋ ‰์…˜ ํŒจํ‚ค์ง€์˜ ์นœ๊ตฌ๋“ค์ด๋‹ค. ์ฐจ์ด์ ์€

Vector๋Š” ์“ฐ๋ ˆ๋“œ์— ๋™๊ธฐํ™”์ฒ˜๋ฆฌ๊ฐ€ ๋˜์–ด์žˆ๊ณ , ArrayList๋Š” ์“ฐ๋ ˆ๋“œ์— ๋™๊ธฐํ™” ๋˜์–ด์žˆ์ง€๋งŽ๋‹ค.

๋™๊ธฐํ™” ์ฒ˜๋ฆฌ๋ฅผ ArrayList๋ฅผ ์‚ฌ์šฉํ•ด ๋ณต์žกํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค, Vector๋ฅผ ์‚ฌ์šฉํ•ด ๋™๊ธฐํ™”๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ •์„ฑ๊ณผ ์„ฑ๋Šฅ์— ์ข‹๋‹ค.

TCP Socket ํ†ต์‹ 

๊ฐ์ฒด ํ†ต์‹ ์—์„œ ๊ฐ์ฒด ์ง๋ ฌํ™” / ์—ญ์ง๋ ฌํ™”์™€ ๋‹ค์ด๋‚˜๋ฏน ํด๋ž˜์Šค ๋กœ๋“œ. ๋ฆฌํ”Œ๋ ‰์…˜ ๊ฐœ๋…์ด ํ•„์š”ํ•˜๋‹ค.

์ง๋ ฌํ™” / ์—ญ์ง๋ ฌํ™”

์—ญ์ง๋ ฌํ™” ๊ณผ์ •

  1. ํ•ด๋‹นํด๋ž˜์Šค๋ฅผ ์ฐพ๋Š”๋‹ค.
  2. JVM์— ๋‹ค์ด๋‚˜๋ฏน ํด๋ž˜์Šค ๋กœ๋”ฉ
  3. ๋ฐ”์ดํŠธ ์ฝ”๋“œ ๊ฒ€์ฆ
  4. ์ธํ„ฐํ”„๋ฆฌํŠธ
โš ๏ธ **GitHub.com Fallback** โš ๏ธ