Skip to content

Latest commit

Β 

History

History
44 lines (33 loc) Β· 1.87 KB

Item_82._document_thread_safety.md

File metadata and controls

44 lines (33 loc) Β· 1.87 KB

Item 82. μŠ€λ ˆλ“œ μ•ˆμ •μ„± μˆ˜μ€€μ„ λ¬Έμ„œν™”ν•˜λΌ

μŠ€λ ˆλ“œ μ•ˆμ •μ„± μˆ˜μ€€μ„ λ¬Έμ„œν™”

  • λ©”μ„œλ“œμ˜ λ¬Έμ„œν™”μ—λŠ” ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— ν˜ΈμΆœν•  λ•Œμ— λŒ€ν•œ λ™μž‘μ΄ ν¬ν•¨λ˜μ–΄ μžˆμ–΄μ•Ό 함
  • ν΄λΌμ΄μ–ΈνŠΈκ°€ 동기화λ₯Ό 해야할지 말지 κ²°μ •ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έ

μŠ€λ ˆλ“œ μ•ˆμ „μ„± μˆ˜μ€€

  1. λΆˆλ³€
    • μƒμˆ˜
    • 동기화가 ν•„μš” μ—†μŒ
  2. 무쑰건적 μŠ€λ ˆλ“œ μ•ˆμ „
    • μˆ˜μ • κ°€λŠ₯ν•˜μ§€λ§Œ λ‚΄λΆ€ 동기화가 이루어져 μ™ΈλΆ€ 동기화가 ν•„μš” μ—†μŒ
    • ex) Atomic class, Concurrent Collections
  3. 쑰건뢀 μŠ€λ ˆλ“œ μ•ˆμ „
    • 일뢀 μƒν™©μ—μ„œλŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ 동기화해야 함
    • μ–΄λ–€ μˆœμ„œλ‘œ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œμ—λŠ” μ–΄λ–€ 락을 μ–»μ–΄μ•Ό ν•˜λŠ”μ§€ λͺ…μ‹œ
    • ex) Collections.synchronized Collections
  4. μŠ€λ ˆλ“œ μ•ˆμ „ν•˜μ§€ μ•ŠμŒ
    • μˆ˜μ • κ°€λŠ₯ν•˜λ©°, ν΄λΌμ΄μ–ΈνŠΈκ°€ 동기화해야 함
    • ex) Collections (ArrayList, HashMap λ“±)
  5. μŠ€λ ˆλ“œ μ λŒ€μ 
    • ν΄λΌμ΄μ–ΈνŠΈκ°€ 동기화해도 μŠ€λ ˆλ“œ μ•ˆμ „ν•˜μ§€ μ•Šμ„ 수 있음
    • 이런 ν΄λž˜μŠ€λŠ” λ§Œλ“€λ©΄ μ•ˆ 됨
    • ν•˜μ§€λ§Œ ν”„λ‘œκ·Έλž˜λ¨Έμ˜ μ‹€μˆ˜λ‘œ 탄생할 수 있으며, 보톡 deprecated됨

μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œ ν‘œμ‹œ

  • @Immutable = 1. λΆˆλ³€
  • @ThreadSafe = 2. 무쑰건적 μŠ€λ ˆλ“œ μ•ˆμ „
  • @NotThreadSafe = 4. μŠ€λ ˆλ“œ μ•ˆμ „ν•˜μ§€ μ•ŠμŒ
  • 보톡 λ¬Έμ„œν™”ν•  λ•Œμ—λ„ 1, 2, 4λ²ˆμ„ 많이 μ‚¬μš©

κ·Έ μ™Έ 지침

lock ν•„λ“œλŠ” final둜 μ„ μ–Έ

  • 락 객체가 ꡐ체되면 μ‹¬κ°ν•œ κ²°κ³Ό 초래 κ°€λŠ₯
  • 락 ν•„λ“œλŠ” 항상 λΆˆλ³€μ΄μ–΄μ•Ό ꡐ체λ₯Ό μ˜ˆλ°©ν•  수 있음

무쑰건적 μŠ€λ ˆλ“œ μ•ˆμ „ 클래슀λ₯Ό μž‘μ„±ν•  λ•Œμ—λŠ” λΉ„κ³΅κ°œ 락 객체λ₯Ό 이용

  • 락 객체가 곡개되면 ν΄λΌμ΄μ–ΈνŠΈ λ˜λŠ” 클래슀λ₯Ό μƒμ†ν•˜λŠ” ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ 락을 μ˜€λ‚¨μš©ν•˜μ—¬ 클래슀의 λ™μž‘μ„ λ°©ν•΄ν•  수 있음