๐Ÿ“•Thread

dev_itzel_02โœจยท2024๋…„ 8์›” 28์ผ
post-thumbnail

๐Ÿท๏ธProcess

๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›์•„ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ

  • ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ์šด์˜์ฒด์ œ์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹น๋ฐ›์•„ ์‹คํ–‰ ์ค‘์ธ ๊ฒƒ
  • ํ”„๋กœ๊ทธ๋žจ์— ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ์™€ ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ์˜ ์ž์› ๊ทธ๋ฆฌ๊ณ  ์Šค๋ ˆ๋“œ๋กœ ๊ตฌ์„ฑ
  • ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์—๋Š” ํ•œ ๊ฐœ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์กด์žฌํ•˜์—ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•จโ—

๐Ÿท๏ธThread

ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์‹ค์ œ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฃผ์ฒด

  • ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ํ๋ฆ„์˜ ๋‹จ์œ„
  • ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ๋ช…๋ น์–ด ๋ธ”๋ก์œผ๋กœ ์‹œ์ž‘์ ๊ณผ ์ข…๋ฃŒ์ ์„ ๊ฐ€์ง
  • ์‹คํ–‰ ์ค‘์— ๋ฉˆ์ถœ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋™์‹œ์— ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ

๐Ÿท๏ธThread ์ƒ์„ฑ ๋ฐฉ๋ฒ•

โ€‚โ˜๐ŸผRunnable ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„

java.lang.Runnable ์ธํ„ฐํŽ˜์ด์Šค๋กœ๋ถ€ํ„ฐ run() ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์ƒ์„ฑ

  • ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค๊ณ  ํ•ด์„œ ๋ฐ”๋กœ ์Šค๋ ˆ๋“œ๊ฐ€ ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹˜.

โ€‚โœŒ๐ŸผThread ํด๋ž˜์Šค ์ƒ์†๋ฐ›๊ธฐ

java.lang.Thread ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›์•„์„œ run() ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ
** run(): ์‹คํ–‰ํ•  ์ฝ”๋“œ ์ž‘์„ฑ

  • start() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์Šค๋ ˆ๋“œ๊ฐ€ ์‹œ์ž‘

๐Ÿท๏ธThread ์‹คํ–‰

  • ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋Š” ํ•œ ๋ฒˆ์— ์Šค๋ ˆ๋“œ 1๊ฐœ๋งŒ ์‹คํ–‰
  • ์šด์˜์ฒด์ œ์˜ ์Šค์ผ€์ค„๋Ÿฌ ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ผ์ •ํ•œ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์œผ๋กœ ์Šค๋ ˆ๋“œ๊ฐ€ ์ „ํ™˜๋จ
  • ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ๋ฒˆ๊ฐˆ์•„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ์— ํ•œ๊ฐ€์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ ๋™์‹œ์— ์ž‘์—…ํ•˜๋Š” ๋“ฏํ•œ ํšจ๊ณผ๋ฅผ ์คŒ โžก๏ธ ์‹œ๋ถ„ํ•  ๋ฐฉ์‹

๐Ÿท๏ธThread ์ƒํƒœ

>> img ref.

์ƒํƒœ์„ค๋ช…
NEW
์Šค๋ ˆ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์ง€๋งŒ ์Šค๋ ˆ๋“œ๊ฐ€ ์•„์ง ์‹คํ–‰ํ•  ์ค€๋น„๊ฐ€ ๋˜์ง€ ์•Š์€ ์ƒํƒœ
RUNNABLE
์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ๊ฑฐ๋‚˜ ์‹คํ–‰ ์ค€๋น„๋˜์–ด ์Šค์ผ€์ฅด๋ง์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ
WAITING
๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ notify(), notifyAll() ์„ ๋ถˆ๋Ÿฌ์ฃผ๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ(๋™๊ธฐํ™”)
TIMED_WAITING
์Šค๋ ˆ๋“œ๊ฐ€ sleep(n) ํ˜ธ์ถœ๋กœ ์ธํ•ด n ๋ฐ€๋ฆฌ์ดˆ ๋™์•ˆ ์ž ์„ ์ž๊ณ  ์žˆ๋Š” ์ƒํƒœ
BLOCK
์Šค๋ ˆ๋“œ๊ฐ€ I/O ์ž‘์—…์„ ์š”์ฒญ ์‹œ ์ž‘์—… ์ข…๋ฃŒ ์ „๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” ์ƒํƒœ
TERMINATED
์Šค๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒํ•œ ์ƒํƒœ

๐Ÿท๏ธThread ์šฐ์„  ์ˆœ์œ„

2๊ฐœ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์ž‘ ์ค‘์ผ ๋•Œ, ์šฐ์„  ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ๋†’์€ ์Šค๋ ˆ๋“œ์—๊ฒŒ ์‹คํ–‰ ์šฐ์„ ๊ถŒ์„ ๋ถ€์—ฌ

  • ์šฐ์„  ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•œ ์ƒ์ˆ˜
    • static final int MAX_PRIORITY: ์šฐ์„ ์ˆœ์œ„ 10 โžก๏ธ ๊ฐ€์žฅ ๋†’์€ ์šฐ์„  ์ˆœ์œ„
    • static final int MIN_PRIORITY: ์šฐ์„ ์ˆœ์œ„ 1 โžก๏ธ ๊ฐ€์žฅ ๋‚ฎ์€ ์šฐ์„  ์ˆœ์œ„
    • static final int NORM_PRIORITY: ์šฐ์„ ์ˆœ์œ„ 5 โžก๏ธ ๋ณดํ†ต์˜ ์šฐ์„  ์ˆœ์œ„
  • ์Šค๋ ˆ๋“œ ์šฐ์„  ์ˆœ์œ„๋Š” ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
    • void setPriority(int priority)
    • int getPriority()
  • main() ์Šค๋ ˆ๋“œ์˜ ์šฐ์„  ์ˆœ์œ„ ๊ฐ’์€ default 5

๐Ÿท๏ธMultiThread

์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ˆ˜ํ–‰

  • ํ”„๋กœ๊ทธ๋žจ์—์„œ ์Šค๋ ˆ๋“œ๋ฅผ ์ž˜๋ชป ๋งŒ๋“ค๋ฉด ํ”„๋กœ๊ทธ๋žจ์˜ ์ˆ˜ํ–‰์ด ์ด๋ฃจ์–ด ์ง€์ง€ ์•Š๊ณ  ๋ฌดํ•œ ์ˆ˜ํ–‰ํ•˜๋Š” Dead Lock ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ.
  • ๊ณต์œ  ์ž์›์„ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ์˜์—ญ์„ ์ž„๊ณ„์˜์—ญ์ด๋ผ๊ณ  ํ•จ
  • ์ž„๊ณ„์˜์—ญ์€ ๊ณต์œ  ์ž์›์„ ๋™์‹œ์— ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋„๋ก ์ƒํ˜ธ ๋ฐฐํƒ€์ ์œผ๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ์ž‘์„ฑ๋˜์–ด์•ผ ํ•จโ—

๐Ÿง ์ƒํ˜ธ๋ฐฐ์ œ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

โ€‚synchronized method : ํ•œ ์ˆœ๊ฐ„์— ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋งŒ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ

๐Ÿ‘‰๐Ÿผ ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ synchronized method ๋ฅผ ์ˆ˜ํ–‰ ์ค‘์ด๋ฉด ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋Š” ๋Œ€๊ธฐํ•จ.

๐Ÿท๏ธMultiThread ํ•„์š”์„ฑ

โ€‚ํ”„๋กœ์„ธ์Šค๋Š” ๋…๋ฆฝ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์„ธ์Šค ๊ฐ„ ์ž์› ๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ์–ด๋ ค์›€. ๋ฐ˜๋ฉด, ํ”„๋กœ๊ทธ๋žจ ๋‚ด์˜ ์Šค๋ ˆ๋“œ๋Š” ์„œ๋กœ ๋…๋ฆฝ์ ์ด์ง€ ์•Š์œผ๋ฉฐ ์ž‘์—…๊ณต๊ฐ„์„ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž์› ๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Œ. ๋”ฐ๋ผ์„œ, ์Šค๋ ˆ๋“œ ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „์†ก์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์‹œ๊ฐ„ ๋ฐ ์ž์› ์†Œ์š”๊ฐ€ ์ ์Œ.
๐Ÿ“Œ ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ ๋‹ค๋Š” ๊ฒƒ์ด ์žฅ์  !!

๐Ÿท๏ธMultiThread ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•˜๋Š” ๋ฉ”์†Œ๋“œ์˜ ์•ž์— synchronized ๋ฉ”์†Œ๋“œ๋กœ ์ง€์ •

๐Ÿท๏ธThread Class

์ƒ์„ฑ์ž๋งค๊ฐœ๋ณ€์ˆ˜
Thread()
-
Thread(String s)
์Šค๋ ˆ๋“œ ์ด๋ฆ„
Thread(Runnable r)
์ธํ„ฐํŽ˜์ด์Šค ๊ฐ์ฒด
Thread(Runnable r, String s)
์ธํ„ฐํŽ˜์ด์Šค ๊ฐ์ฒด์™€ ์Šค๋ ˆ๋“œ ์ด๋ฆ„

โœ๐Ÿผ Thread Method

๋ฉ”์†Œ๋“œ์„ค๋ช…
static void sleep(long msec) throws InterruptedException
msec์— ์ง€์ •๋œ ๋ฐ€๋ฆฌ์ดˆ ๋™์•ˆ ๋Œ€๊ธฐ
String getName()
์Šค๋ ˆ๋“œ ์ด๋ฆ„ ๋ฐ˜ํ™˜
void setName(String s)
์Šค๋ ˆ๋“œ ์ด๋ฆ„์„ s๋กœ ์„ค์ •
void start()
์Šค๋ ˆ๋“œ๋ฅผ ์‹œ์ž‘ run() ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ
int getPriority()
์Šค๋ ˆ๋“œ์˜ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๋ฐ˜ํ™˜
void setPriority(int p)
์Šค๋ ˆ๋“œ์˜ ์šฐ์„  ์ˆœ์œ„๋ฅผ p ๊ฐ’์œผ๋กœ ์„ค์ •
boolean isAlive()
์Šค๋ ˆ๋“œ๊ฐ€ ์‹œ์ž‘๋˜์—ˆ๊ณ , ์•„์ง ๋๋‚˜์ง€ ์•Š์•˜์œผ๋ฉด T, ๋๋‚ฌ์œผ๋ฉด F ๋ฐ˜ํ™˜
void join() throws InterruptedException
์Šค๋ ˆ๋“œ๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ
void run()
์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰ํ•  ๋ถ€๋ถ„ ์˜ค๋ฒ„๋ผ์ด๋”ฉ
void suspend()
์Šค๋ ˆ๋“œ๊ฐ€ ์ผ์‹œ์ •์ง€ resume()์— ์˜ํ•ด ๋‹ค์‹œ ์‹œ์ž‘
void resume()
์ผ์‹œ ์ •์ง€๋œ ์Šค๋ ˆ๋“œ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘
void yield()
๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—๊ฒŒ ์‹คํ–‰ ์ƒํƒœ๋ฅผ ์–‘๋ณดํ•˜๊ณ , ์ค€๋น„ ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ

๐Ÿท๏ธTimer Class

๋ฐฑ๊ทธ๋ผ์šด๋“œ Thread๋กœ ์‹คํ–‰๋˜๋Š” ์ผ์„ 1ํšŒ ๋˜๋Š” ์ •๊ธฐ์ ์œผ๋กœ ๋ฐ˜๋ณต ์‹คํ–‰๋˜๋„๋ก ์Šค์ผ€์ฅด๋ง ํ•ด์ฃผ๋Š” ํด๋ž˜์Šค

์ƒ์„ฑ์ž๋งค๊ฐœ๋ณ€์ˆ˜
Timer()
-
Timer(boolean isDaemon)
daemon์œผ๋กœ ์‹คํ–‰๋˜๋Š” ํƒ€์ด๋จธ
Timer(String name)
์ง€์ •๋œ ์ด๋ฆ„์˜ thread๋ฅผ ๊ฐ€์ง€๋Š” ํƒ€์ด๋จธ
Timer(String name, booelan isDaemon)
์ง€์ •๋œ ์ด๋ฆ„์˜ thread๋ฅผ ๊ฐ€์ง€๋Š” ์ƒˆ๋กœ์šด ํƒ€์ด๋จธ

โœ๐Ÿผ Timer Method

๋ฉ”์†Œ๋“œ์„ค๋ช…
void cancel()ํ˜„์žฌ ์Šค์ผ€์ค„๋ง ์ข…๋ฃŒ
void schedule(TimerTask task, Date time)์ง€์ •ํ•œ ์‹œ๊ฐ„์œผ๋กœ ์ง€์ •ํ•œ ํƒœ์Šคํฌ๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ์Šค์ผ€์ค„ ์„ค์ •
void schedule(TimerTask task, Date firstTime, long period)์ง€์ •ํ•œ ํƒœ์Šคํฌ๋ฅผ ์ง€์ •ํ•œ ์‹œ๊ฐ„์— ์‹คํ–‰๋˜๊ณ , ๊ธฐ๊ฐ„์„ ๊ฐ€์ง€๊ณ  ๋ฐ˜๋ณต
void schedule(TimerTask task, long delay)์ง€์ •ํ•œ ์‹œ๊ฐ„์„ ์ง€์—ฐ ํ›„์— ์ง€์ •ํ•œ ํƒœ์Šคํฌ๋ฅผ ์‹คํ–‰
profile
๐Ÿœ๐Ÿ‘ฃsteadiness๐Ÿœ๐Ÿ‘ฃ

0๊ฐœ์˜ ๋Œ“๊ธ€