πŸ–₯️ λ°±μ—”λ“œ/Java

[ch.13] μ“°λ ˆλ“œ μ‹€ν–‰ μ œμ–΄ λ©”μ„œλ“œ

OR15A 2023. 11. 15. 20:10

μ“°λ ˆλ“œμ˜ μ‹€ν–‰ μ œμ–΄

  • “효율적인 λ©€ν‹°μ“°λ ˆλ“œ ν”„λ‘œκ·Έλž¨ λ§Œλ“€κΈ°”
    • =μ •κ΅ν•œ μŠ€μΌ€μ€„λ§μ„ 톡해 ν”„λ‘œμ„ΈμŠ€μ—κ²Œ 주어진 μžμ›κ³Ό μ‹œκ°„μ„ μ—¬λŸ¬ μ“°λ ˆλ“œκ°€ 낭비없이 잘 μ‚¬μš©ν•˜λ„λ‘ ν”„λ‘œκ·Έλž˜λ° ν•˜λŠ” 것.

 

λ©”μ„œλ“œ(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문으둜 감싸야함.