๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ๏ธ ๋ฐฑ์—”๋“œ/Java

[ch.13] ์“ฐ๋ ˆ๋“œ ์‹คํ–‰ ์ œ์–ด ๋ฉ”์„œ๋“œ

by OR15A 2023. 11. 15.

์“ฐ๋ ˆ๋“œ์˜ ์‹คํ–‰ ์ œ์–ด

  • “ํšจ์œจ์ ์ธ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋žจ ๋งŒ๋“ค๊ธฐ”
    • =์ •๊ตํ•œ ์Šค์ผ€์ค„๋ง์„ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์ฃผ์–ด์ง„ ์ž์›๊ณผ ์‹œ๊ฐ„์„ ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋‚ญ๋น„์—†์ด ์ž˜ ์‚ฌ์šฉํ•˜๋„๋ก ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•˜๋Š” ๊ฒƒ.

 

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

  • static๋ฉ”์„œ๋“œ๋ผ ์ž์‹ ์—๊ฒŒ๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•จ.  (์ž์‹ =ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์“ฐ๋ ˆ๋“œ)

 

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

 

 

์“ฐ๋ ˆ๋“œ์˜ ์Šค์ผ€์ค„๋ง ๊ด€๋ จ ๋ฉ”์„œ๋“œ

 

sleep(์‹œ๊ฐ„) static๋ฉ”์„œ๋“œ

    • ์ง€์ •๋œ ์‹œ๊ฐ„๋™์•ˆ ์“ฐ๋ ˆ๋“œ ๋ฉˆ์ถ”๊ธฐ.
    • sleep์— ์˜ํ•ด ์ผ์‹œ์ •์ง€๋œ ์“ฐ๋ ˆ๋“œ๋ฅผ ๊นจ์šฐ๋Š”(์‹คํ–‰๋Œ€๊ธฐ ์ƒํƒœ๋กœ ๋งŒ๋“ค๊ธฐ) ๋ฐฉ๋ฒ•
      • โ‘ ์ง€์ •๋œ ์‹œ๊ฐ„ ๋‹ค ๋˜๊ธฐ
      • โ‘ก interrupt( )ํ˜ธ์ถœ
    • sleep( )ํ˜ธ์ถœ ์‹œ ๋ฐ˜๋“œ์‹œ try-catch๋ฌธ์œผ๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ํ•ด์ฃผ์–ด์•ผ ํ•จ. (์ด๊ฒƒ์„ ๋ฉ”์„œ๋“œ๋กœ ๋งŒ๋“ค์–ด๋„ ๋จ)
    • ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๊ฐ€ ํ˜„์žฌ ์“ฐ๋ ˆ๋“œ์—๊ฒŒ interruptํ•˜๋ฉด
    • sleep( )๋ฉ”์„œ๋“œ๊ฐ€ Interrupted Exception์„ ๋˜์ง€๊ณ  ์ผ์‹œ์ •์ง€ ์ƒํƒœ์—์„œ ๋น ์ ธ๋‚˜์™€์„œ ์‹คํ–‰๋Œ€๊ธฐํ•จ.

  • sleep( )์€ ํ•ญ์ƒ ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ ์“ฐ๋ ˆ๋“œ์— ๋Œ€ํ•ด ๋™์ž‘ํ•จ. t1.sleep(1000) X Thread.sleep(1000) O

 

 

deprecated๋œ ๋ฉ”์„œ๋“œ๋“ค (๊ต์ฐฉ์ƒํƒœ ์ผ์œผ์ผœ์„œ)

  • suspend( ): ์“ฐ๋ ˆ๋“œ ๋ฉˆ์ถ”๊ธฐ
  • resume( ): suspend๋กœ ์ •์ง€๋œ ์“ฐ๋ ˆ๋“œ๋ฅผ ์‹คํ–‰๋Œ€๊ธฐ ์ƒํƒœ๋กœ ๋งŒ๋“ฆ
  • stop( ): ํ˜ธ์ถœ๋˜๋Š” ์ฆ‰์‹œ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ข…๋ฃŒํ•จ

 

์“ฐ๋ ˆ๋“œ์˜ ์ž‘์—… ์ค‘๋‹จ

  • ๊ฐ„์ ์ ์ธ ์ž‘์—… ์ค‘๋‹จ
  • ์ง์ ‘์ ์ธ ์ž‘์—… ์ค‘๋‹จ

 

interrupt( )

  • โ‘ ์ฃผ๋กœ ์“ฐ๋ ˆ๋“œ์˜ ์ž‘์—…์„ ๊ฐ•์ œ๋กœ ์ค‘๋‹จ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•จ. ํ˜„์žฌ ์ž‘์—… ์ค‘์ธ ์“ฐ๋ ˆ๋“œ์—๊ฒŒ interrupt() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, ํ•ด๋‹น ์“ฐ๋ ˆ๋“œ๋Š” ์‹คํ–‰ ๋Œ€๊ธฐ ์ƒํƒœ๊ฐ€ ๋จ. (๊ฐ„์ ‘์ ์ธ ์ž‘์—… ์ค‘๋‹จ์ฒ˜๋Ÿผ ๋จ)
  • โ‘กsleep()์ด๋‚˜ join() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ๋Š” ์“ฐ๋ ˆ๋“œ์—๊ฒŒ interrupt()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, ํ•ด๋‹น ์“ฐ๋ ˆ๋“œ๋Š” InterruptedException ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ์‹คํ–‰ ๋Œ€๊ธฐ ์ƒํƒœ๊ฐ€ ๋จ. ์ด ๋•Œ๋ฌธ์— ํ•ด๋‹น ์“ฐ๋ ˆ๋“œ๋Š” ์ผ์‹œ์ •์ง€ ์ƒํƒœ์—์„œ ๋ฒ—์–ด๋‚˜๊ฒŒ ๋˜์–ด, ๋‹ค์‹œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ.
    • โ‘ก๋ฒˆ ๊ฒฝ์šฐ ์“ฐ๋ ˆ๋“œ๊ฐ€ sleep( ), wait( ), join( )์œผ๋กœ ์ผ์‹œ์ •์ง€ ์ƒํƒœ๊ฐ€ ๋จ. → interrupt( ) ํ˜ธ์ถœ. →์ผ์‹œ์ •์ง€ ๋ฉ”์„œ๋“œ์—์„œ InterruptedException ๋ฐœ์ƒ. → ์“ฐ๋ ˆ๋“œ ์‹คํ–‰๋Œ€๊ธฐ ์ƒํƒœ๊ฐ€ ๋จ.
  • โ‘ขinterrupt() ๋ฉ”์„œ๋“œ๋Š” ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ฌดํ•œ ๋ฃจํ”„์— ๋น ์ ธ ์žˆ์„ ๋•Œ, ์ฆ‰์‹œ ์ค‘๋‹จ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ. ์ด ๊ฒฝ์šฐ์—๋„ interrupt() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, ์“ฐ๋ ˆ๋“œ๋Š” InterruptedException ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ์‹คํ–‰ ๋Œ€๊ธฐ ์ƒํƒœ๊ฐ€ ๋จ.
    • →๋”ฐ๋ผ์„œ, interrupt() ๋ฉ”์„œ๋“œ์˜ ์—ญํ• ์€ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€์ง€๋งŒ, ์ฃผ๋กœ ์“ฐ๋ ˆ๋“œ๋ฅผ ๊ฐ•์ œ๋กœ ์ค‘๋‹จ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋จ.

 

interrupt( )์™€ interrupted( )

 

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

  • ์“ฐ๋ ˆ๋“œ ์ž์‹ ์—๊ฒŒ ์ฃผ์–ด์ง„ ์‹œ๊ฐ„์„ ๋‹ค์Œ ์ฐจ๋ก€ ์“ฐ๋ ˆ๋“œ์—๊ฒŒ ์–‘๋ณดํ•จ.
  • ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ์—๊ฒŒ ์‹คํ–‰์„ ์–‘๋ณดํ•˜๊ณ , ๋‹ค์Œ ์ฐจ๋ก€์˜ ์“ฐ๋ ˆ๋“œ์—๊ฒŒ CPU๋ฅผ ์–‘๋„.
  • ์‹คํ–‰ ์ค‘์ธ ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ์—๊ฒŒ ์‹คํ–‰ ๊ธฐํšŒ๋ฅผ ์ฃผ๋Š” ์—ญํ• .

 

join( )

  • ์“ฐ๋ ˆ๋“œ ์ž์‹ ์ด ํ•˜๋˜ ์ž‘์—…์„ ์ž ์‹œ ๋ฉˆ์ถ”๊ณ  ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ง€์ •๋œ ์‹œ๊ฐ„๋™์•ˆ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•จ.
  • ํ˜ธ์ถœ ์‹œ sleep์ฒ˜๋Ÿผ try-catch๋ฌธ์œผ๋กœ ๊ฐ์‹ธ์•ผํ•จ.