Item 78. Mutable Data Sharing
곡μ μ€μΈ κ°λ³ λ°μ΄ν°λ λκΈ°νν΄ μ¬μ©νλΌ
synchronized
ν€μλλ ν΄λΉ λ©μλλ λΈλ‘μ ν λ²μ ν μ€λ λμ© μννλλ‘ λ³΄μ₯νλ©°, μλμ νΉμ§μ κ°μ§λ€.
ν κ°μ²΄κ° μΌκ΄λ μνλ₯Ό κ°μ§κ³ μμ±λμμ λ, ν΄λΉ κ°μ²΄μ μ κ·Όνλ λ©μλλ ν΄λΉ κ°μ²΄μ΄ Lockμ νλ
Lockμ νλν λ©μλλ κ°μ²΄μ μνλ₯Ό νμΈνκ±°λ λ³κ²½ν μ μμ
λ©μλ μ€νμ΄ μ’ λ£λλ©΄ Lockμ ν΄μ
λκΈ°ν μμ΄λ ν μ€λ λκ° κ°μ²΄μ μΌκ΄μ±μ΄ κΉ¨μ§ μνλ₯Ό λ³΄κ² λ μ μμ
λκΈ°νλ λ©μλλ λΈλ‘μ λ€μ΄κ° μ€λ λκ° κ°μ²΄μ μΌκ΄μ±μ΄ κΉ¨μ§ μνλ₯Ό λ³΄μ§ λͺ»νλλ‘ λ³΄μ₯
Javaμμ κ°λ³ λ°μ΄ν° μ€λ λκ° ν΅μ
μλ μ½λλ boolean νλλ₯Ό κ²μ¬νλ©΄μ κ·Έ κ°μ΄ trueκ° μλλ©΄ 무ν 루νλ₯Ό λλ©° κ°μ μ¦κ°μν€λ μ½λμ΄λ€.
1μ΄ ν λ©μΈ μ€λ λμμ stopRequested νλμ κ°μ trueλ‘ λ³κ²½νκ³ μμ§λ§, μ€μ λ‘ λ³κ²½λ κ°μ λ°λ‘ μ½μ§ λͺ»νλ κ²½μ°κ° λ°μν μ μλ€. ** μ€ν νκ²½μ λ°λΌ 1μ΄ νμ λ°λ‘ μ’ λ£λ μλ μλ€.
synchronized λ©μλλ₯Ό μ΄μ©ν λκΈ°ν
ν΄λΉ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄μ stopRequested νλμ μ κ·Όνλ λ©μλλ₯Ό λκΈ°ν νλ λ°©λ²μ΄ μλ€.
μ°κΈ°(requestStop
)μ μ½κΈ°(stopRequested
) λ©μλ λͺ¨λ synchronized
ν€μλλ₯Ό μ¬μ©νκ³ μλλ°,
μ½κΈ°μ μ°κΈ° μ λΆ synchronized
ν€μλλ₯Ό μ¬μ©νμ§ μμΌλ©΄ λκΈ°νκ° μ λλ‘ μ΄λ£¨μ΄μ§μ§ μλλ€.(κ°νΉ μ λμνλ κ² μ²λΌ λ³΄μΌ μ μμ§λ§ μ€μ λ‘ κ·Έλ μ§ μλ€.)
volatile νλλ₯Ό μ΄μ©ν λκΈ°ν
volatile
ν€μλλ₯Ό μ¬μ©νμ¬ ν΄λΉ νλλ₯Ό μ½κ³ μ°λ λμμ΄ νμ λ©μΈ λ©λͺ¨λ¦¬μ λ°μλλλ‘ λ³΄μ₯νλ λ°©λ²μ΄ μλ€.
volatile μ£Όμμ¬ν
μμ λ¬Έμ λ volatile
ν€μλλ₯Ό μ¬μ©νμ¬ λ¬Έμ λ₯Ό ν΄κ²°νμ§λ§, ν΄λΉ ν€μλλ νλλ₯Ό μ½κ³ μ°λ ν΅μ λ§ λ³΄μ₯νλ©°, λμμ±μ 보μ₯νμ§λ μλλ€.
μ μ½λλ₯Ό μ€νν΄λ³΄λ©΄ 2000000μ΄ λμμΌ ν κ² κ°μ§λ§, μ€μ λ‘λ 1592872(2000000μ΄ μλ κ°)κ° λμ€λ κ²μ νμΈν μ μλ€.
μ΄λ volatile
ν€μλλ ν΄λΉ νλλ₯Ό μ½κ³ μ°λ ν΅μ λ§ λ³΄μ₯νλ©°, λμμ±μ 보μ₯νμ§λ μκΈ° λλ¬Έμ΄λ€.
synchronized λΈλ‘μ μ΄μ©ν λκΈ°ν
μ²μ λμλ synchronized
ν€μλλ₯Ό μ¬μ©νμ¬ ν΄λΉ νλλ₯Ό μ½κ³ μ°λ ν΅μ κ³Ό λμμ±μ 보μ₯νλ λ°©λ²μ΄ μλ€.
Atomic ν΄λμ€λ₯Ό μ΄μ©ν λκΈ°ν
λ©ν° μ€λ λ νκ²½μμ λκΈ°ν λ¬Έμ λ₯Ό λ³λμ synchronized ν€μλ μμ΄ ν΄κ²°ν μ μλ λ°©λ²μΌλ‘ java.util.concurrent.atomic
ν¨ν€μ§μ μλ Atomic ν΄λμ€λ₯Ό μ¬μ©νλ λ°©λ²μ΄ μλ€.
(λ΄λΆμ μΌλ‘ volatile ν€μλμ CAS μκ³ λ¦¬μ¦μ μ¬μ©νμ¬ λμμ± λ¬Έμ λ₯Ό ν΄κ²°νκ³ μλ€.)
κ²°λ‘
κ°λ³ λ°μ΄ν°λ₯Ό 곡μ νλ λ°©λ²μ λ€λ£¨μμ§λ§, λ 볡μ‘ν λ‘μ§μμλ λ¬Έμ κ° μ΄λμ λ°μν μ§ μμΈ‘ν μ μμΌλ―λ‘ κ°λ³ λ°μ΄ν°λ₯Ό 곡μ νμ§ μλ λ°©λ²μ μ¬μ©νλ κ²μ΄ κ°μ₯ μ’λ€. λ§μ½ λ©ν° μ€λ λ νκ²½μμ κ°λ³ λ°μ΄ν°λ₯Ό 곡μ ν΄μΌ νλ€λ©΄ μλ μ¬νμ μ£Όμνμ.
ν΄λΉ λ°μ΄ν°λ₯Ό μ½κ³ μ°λ λ©μλ μ λΆ
synchronized
ν€μλλ₯Ό μ¬μ©νμ¬ λκΈ°νvolatile
ν€μλλ₯Ό μ¬μ©νλ©΄ ν΅μ μ 보μ₯λμ§λ§, λμμ±μ 보μ₯λμ§ μλ κ²μ μ£Όμκ°λ³ λ°μ΄ν°κ°
java.util.concurrent.atomic
ν¨ν€μ§μμ μ 곡νλ€λ©΄ ν΄λΉ ν΄λμ€λ₯Ό κ³ λ €ν΄λ μ’μ
Last updated
Was this helpful?