π λ©ν° μ½μ΄ νλ‘μΈμ
λ©ν° μ½μ΄ νλ‘μΈμμλ μ½μ΄λ§λ€ λ³λμ κ°μλ₯Ό κ°μ§κ³ μκΈ° λλ¬Έμ λ©ν° μ°λ λ νλ‘κ·Έλλ°μ κ²°κ³Όκ° μ λλ‘ λμνμ§ μμ μ μλ€.
L1μΊμμ L2μΊμμ λν΄μ κ°λ¨ν μ€λͺ νλ©΄ λ€μκ³Ό κ°λ€.
- L1 μΊμλ CPU μ½μ΄μ κ°μ₯ κ°κΉμ΄ μμΉμ μμ΄ λΉ λ₯΄κ² μ κ·Όν μ μμ§λ§ μ©λμ΄ μλ€.
- L2 μΊμλ L1μΊμλ³΄λ€ ν¬λ©° μλλ λ리λ€. μ¬λ¬ μ½μ΄κ°μ λ°μ΄ν° 곡μ λ₯Ό μν μΊμλ‘ μ¬μ©λλ€.
μ½μ΄λ λ©λͺ¨λ¦¬μμ μ½μ΄μ¨ κ°μ μΊμμ μ μ₯νκ³ μΊμμμ κ°μ μ½μ΄μ μμ νλ€. λ°λΌμ λ€μ κ°μ μ½μ΄μ¬ λλ λ¨Όμ μΊμμ μλμ§ νμΈνκ³ μμ λλ§ λ©λͺ¨λ¦¬μμ μ½μ΄μ¨λ€. λ©ν° μ½μ΄ νλ‘μΈμ€μμλ λ€μκ³Ό κ°μ΄ μ½μ΄λ§λ€ λ³λμ μΊμλ₯Ό κ°μ§κ³ μκΈ° λλ¬Έμ μνλ κ²°κ³Όλ₯Ό μ»μ§ λͺ»ν μλ μλ€.
π Volatile ν€μλ
μλ°μμλ μμ λ¬Έμ μ μ ν΄κ²°νκΈ° μν΄ Volatile ν€μλλ₯Ό μ 곡νλ€. λ³μμ μ΄ ν€μλλ₯Ό λΆμ΄λ©΄ μ½μ΄κ° κ°μ μ½μ΄μ¬ λ μΊμκ° μλ λ©λͺ¨λ¦¬μμ μ½μ΄μ¨λ€. λ³μμ synchronized λΈλμ μ¬μ©ν΄λ κ°μ ν¨κ³Όλ₯Ό λλ μ μλ€.
ποΈ Volatileκ³Ό synchronized
volatileμ ν΄λΉ λ³μμ λν μ½κ±°λ μ°κΈ°κ° μμνλλ€. μμνλλ€λ μλ―Έλ νλμ μ°λ λκ° μ°κΈ° μμ μ΄ μμ ν μνλ νμ λ€λ₯Έ μ°λ λκ° μ°κΈ° μμ μ μννλ€. μ¦ μ΄ νλμ μμ μ νλ λμ λ€λ₯Έ μν₯μ λ°μ§ μλλ€. snychronized λΈλλ μΌμ’ μ μμνλΌκ³ ν μ μλ€. μ΄ λμ μ°¨μ΄μ μ λκΈ°νμ μ¬λΆμ΄λ€. volatileμ λ³μμ μ½κ±°λ μ°κΈ°λ₯Ό μμν ν λΏ, λκΈ°ν νμ§ μλλ€.
μλ₯Ό λ€μ΄ λ€μκ³Ό κ°μ μ½λμμ getBalance()μ synchronizedλ₯Ό μ¬μ©νμ§ μμΌλ©΄ μνλ κ²°κ³Όλ₯Ό μ»μ μ μλ€.
volatile long balance;
synchronized int getBalance() {
return balance;
}
synchronized void withdraw(int money) {
if(balance >= money) balance -= money;
}
ποΈ volatile ν€μλμ μ¬μ©
- λ³μμ κ°μμ±μ΄ νμν κ²½μ° : μ¬λ¬ κ°μ μ€λ λκ° λμμ νλμ λ³μλ₯Ό μ½κ±°λ μ°λ μν©μμ 'volatile'μ μ¬μ©νμ¬ λ³μμ λ³κ²½ μ¬νμ΄ μ¦μ λ€λ₯Έ μ€λ λμκ² μλ €μ§ μ μλλ‘ ν μ μλ€.
- λ³μμ μ΅μ κ°μ 보μ₯ν΄μΌ νλ κ²½μ° : volatile ν€μλκ° μ¬μ©λ λ³μλ νμ μ΅μ κ°μ μ½μ μ μλ€.